《Head First设计模式》C#实现(五)——抽象工厂模式

抽象工厂模式

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

UML类图:

场景:抽象村商店想销售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(违反开闭原则?)

时间: 2024-10-13 09:44:54

《Head First设计模式》C#实现(五)——抽象工厂模式的相关文章

Java设计模式菜鸟系列(五)抽象工厂模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 抽象工厂模式(Abstract Factory):抽象工厂--顾名思义,就是把工厂抽象出来,不同的工厂生产不同的产品.这样做有个好处:一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码. 一.uml建模图: 二.代码实现 /** * 示例:抽象工厂--顾名思义,就是把工厂抽象出来,不同的工厂生产不同的产品 * * 优点:一旦需要增加新的功能,直接增加新的

设计模式(3)--抽象工厂模式(Absrtact Factory Pattern)

定义 抽象工厂模式的实质就是提供接口来创建一系列相关或独立的对象而不指定这些对象的具体类. 理解 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(熟悉的new操作符),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂

设计模式(三)——抽象工厂模式

设计模式(三)--抽象工厂模式 一.抽象工厂模式 1.抽象工厂模式简介 定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. UML类图: 2.抽象工厂模式角色 (1)抽象工厂AbstractFactory:抽象工厂类,提供创建两种产品的接口CreateProductA和CreateProductB,由派生的各个具体工厂类对其实现 (2)具体工厂:包括具体工厂FactoryM和具体工厂FactoryN.具体工厂FactoryM用于生产具体产品MProductA和具体产品M

设计模式(3)抽象工厂模式(Abstract Factory)

设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂模式一般的书面定义为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 提供创建接口,无需指定具体实现类,这个原则在简单工厂模式和工厂方法模式篇已经反复讲到了,这是面向接口编程的一个基本准则,很显然,从抽象工厂模式的一般定义中可以看出这也是抽象工厂模式的一个核心,而抽象工厂模式的另

设计模式之创建型抽象工厂模式

通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责某一类产品的实例.抽象类是一种声明但不能使用的类,当你使用的时候就会报错.JavaScript中的抽象类不能像传统面向对象语言那样轻松地创建,我们可以在类的方法中手动抛出错误来模拟抽象类.你可能会想,这样的类什么都不能做有什么用?其实它在继承上是很有用的.抽象工厂模式不能用来创建具体对象,一般用它作为父类创建一些子类. // 抽象工厂方法 var PageFactory = function(parent, child) { // 判断抽象

(五) 抽象工厂模式

转载:http://www.cnblogs.com/zuoxiaolong/p/pattern6.html 前两章我们已经讨论了两种有关工厂的模式,今天我们来看最后一种与工厂相关的模式,抽象工厂模式. 抽象工厂模式算是工厂相关模式的终极形态,如果各位完全理解了上一章的工厂方法模式,那么抽象工厂模式就很好理解了.它与工厂方法唯一的区别就是工厂的接口里是一系列创造抽象产品的方法,而不再是一个,而相应的,抽象产品也不再是一个了,而是一系列相关的产品.这其实是工厂方法模式的一种扩展不是吗? 通常意义来我

设计模式(六)抽象工厂模式

一.应用背景 还是以宝马汽车制造为例. 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件.于是这个工厂开始生产空调和发动机,用来组装汽车.这时候工厂有两个系列的产品:空调和发动机.宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机. 二.具体例子: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为32

设计模式(二)抽象工厂模式

抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 主要解决:主要解决接口选择的问题. 何时使用:系统的产品有多于一个的产品族,而系统只消费其

【设计模式】1、抽象工厂模式

对于这个抽象工厂的相应的代码实现 /** * 功能:抽象工厂模式的作用 适用性 1.一个系统要独立于它的产品的创建.组合和表示时. 2.一个系统要由多个产品系列中的一个来配置时. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. * 时间:2016年2月11日22:18 * 作者:cutter_point */ package com.shejimoshi.create.AbstractFactory; public in