《Head First设计模式》C#实现(五)
场景:抽象村商店想销售Pizza和Hamburg等多种商品,而在美国店和中国店要出售本土化的口味
工厂接口定声明了要创建的产品接口
interface Factory { AbstractHamburg createHamburg(); AbstractPizza createPizza(); }
具体的工厂创建具体产品
class USAFactory : Factory { public AbstractHamburg createHamburg() { return new USAHamburg(); } public AbstractPizza createPizza() { return new USAPizza(); } }
抽象产品
interface AbstractPizza { string getName(); }
interface AbstractHamburg { string getName(); }
各地的具体产品的一个例子
class USAHamburg : AbstractHamburg { public string getName() { return "USAHamburg"; } } class USAPizza : AbstractPizza { public string getName() { return "USAPizza"; } }
具体的工厂
class USAFactory : Factory { public AbstractHamburg createHamburg() { return new USAHamburg(); } public AbstractPizza createPizza() { return new USAPizza(); } }
商店
class Store { public AbstractHamburg hamburg; public AbstractPizza pizza; public Store(Factory factory) { hamburg = factory.createHamburg(); pizza = factory.createPizza(); } public void sellPizza(){ Console.WriteLine("Sell a "+pizza.getName()); } public void sellHamburg() { Console.WriteLine("Sell a " + hamburg.getName()); } }
运行
static void Main(string[] args)
{
Factory factory = new USAFactory();
Store store = new Store();
store.sellPizza(factory);
store.sellHamburg(factory);
factory = new CNFactory();
store.sellPizza(factory);
store.sellHamburg(factory);
Console.ReadKey();
}
运行结果
效果:
1.分离了具体类 客户Store提供抽象接口操作实例,它不知道具体操作的是什么类(低耦合?)
2.易于改变系列 将USAFactory换成CNFactory就转换成生成另一个系列的产品(一秒换装)
3.有利于产品的一致性 一系列产品都是CN或者USA的(民族主义必备)
4.难以支撑新种类的产品 Store想卖薯条就要修改抽象Factory和所有具体Factory(违反开闭原则?)
,温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67390.html
- 上一篇:C#之Linq学习笔记【转】
- 下一篇:介绍一个好用的软件