using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _016 { //抽象類(菜) public abstract class Food { //抽象方法,輸出 ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _016
{
//抽象類(菜)
public abstract class Food
{
//抽象方法,輸出點了的菜
//抽象方法接下來會被重寫,直接調用抽象方法就可以
public abstract void Print();//抽象方法沒有方法體
}
//列印土豆絲 類
//重寫抽象方法
public class tds : Food
{
public override void Print()
{
Console.WriteLine("來份土豆絲");
}
}
//列印西紅柿 類
//抽血抽象方法
public class xhs : Food
{
public override void Print()
{
Console.WriteLine("來份西紅柿");
}
}
//工廠類 廚師
public class cs
{
public static Food CreateFood(string t)
{
Food food = null;
if (t.Equals("土豆絲"))
{
food = new tds();
}
else if (t.Equals("西紅柿"))
{
food = new xhs();
}
return food;
}
}
class Program
{
static void Main(string[] args)
{
Food food1 = cs.CreateFood("土豆絲");
food1.Print();
Food food2 = cs.CreateFood("西紅柿");
food2.Print();
//手動輸入土豆絲或是西紅柿
try
{
Food food3 = cs.CreateFood(Console.ReadLine());
food3.Print();
}
catch { }
Console.ReadKey();
}
}
}
#region 複製粘貼的 工廠模式介紹
// 簡單工廠模式的介紹
//說到簡單工廠,自然的第一個疑問當然就是什麼是簡單工廠模式了?
//在現實生活中工廠是負責生產產品的,同樣在設計模式中,簡單工廠模式
//我們也可以理解為負責生產對象的一個類, 我們平常編程中,當使用
//”new”關鍵字創建一個對象時,此時該類就依賴與這個對象,也就是
//他們之間的耦合度高,當需求變化時,我們就不得不去修改此類的源碼,
//此時我們可以運用面向對象(OO)的很重要的原則去解決這一的問題,
//該原則就是——封裝改變,既然要封裝改變,自然也就要找到改變的代碼,
//然後把改變的代碼用類來封裝,這樣的一種思路也就是我們簡單工廠模式的實現方式了。
// 優點與缺點
//看完簡單工廠模式的實現之後,你和你的小伙伴們肯定會有這樣的疑惑(因為我學習的時候也有)——這樣我們只是把變化移到了工廠類中罷了,好像沒有變化的問題,因為如果客戶想吃其他菜時,此時我們還是需要修改工廠類中的方法(也就是多加case語句,沒應用簡單工廠模式之前,修改的是客戶類)。我首先要說:你和你的小伙伴很對,這個就是簡單工廠模式的缺點所在(這個缺點後面介紹的工廠方法可以很好地解決),然而,簡單工廠模式與之前的實現也有它的優點:
//簡單工廠模式解決了客戶端直接依賴於具體對象的問題,客戶端可以消除直接創建對象的責任,而僅僅是消費產品。簡單工廠模式實現了對責任的分割。
//簡單工廠模式也起到了代碼復用的作用,因為之前的實現(自己做飯的情況)中,換了一個人同樣要去在自己的類中實現做菜的方法,然後有了簡單工廠之後,去餐館吃飯的所有人都不用那麼麻煩了,只需要負責消費就可以了。此時簡單工廠的燒菜方法就讓所有客戶共用了。(同時這點也是簡單工廠方法的缺點——因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都會受到影響,也沒什麼不好理解的,就如事物都有兩面性一樣道理)
//雖然上面已經介紹了簡單工廠模式的缺點,下麵還是總結下簡單工廠模式的缺點:
//工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都會受到影響(通俗地意思就是:一旦餐館沒飯或者關門了,很多不願意做飯的人就沒飯吃了)
//系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,這樣就會造成工廠邏輯過於複雜。
//瞭解了簡單工廠模式之後的優缺點之後,我們之後就可以知道簡單工廠的應用場景了:
//當工廠類負責創建的對象比較少時可以考慮使用簡單工廠模式()
//客戶如果只知道傳入工廠類的參數,對於如何創建對象的邏輯不關心時可以考慮使用簡單工廠模式
#endregion