`

设计模式-抽象工厂模式

阅读更多

 

自己CSDN blog 上回收来的,以后都集中到这里了。

 

 

设计模式笔记-抽象工厂模式     

      
摘要:介绍了抽象工厂模式的基本概念,并给出了c#语言编写的程序示例


       抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以前的那个快餐店的例子。
      现在,快餐店经营良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。
      抽象工厂模式对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加美国系列快餐(相当于增加了一个产品族),则只要从每个 产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这个产品,则它是不支持开闭原则的,因为你要在厨师 接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承此接口的具体类也要随之改变。
       使用抽象工厂模式的条件:
1 一个系统不应依赖于产品如何被创建,组合和表达的细节。
2 有多个产品族,而系统只消费其中一个族中的产品
3 同属于一个产品族的产品是在一起使用的。
4 系统提供一个产品的库,所有产品都是以同样的接口实现。

看下面的C#实现:

 

 

using System;

namespace AbstractFactory
{
 /// <summary>
 /// 抽象工厂模式示例
 /// </summary>
 class AbstractFactory
 {


  //定义厨师的抽象工厂
  public interface Chef
  {
       //这里定义厨师的公共操作
       //返回抽象面条
       Noodle MakeNoodle();
       //返回抽象米饭
       Rice MakeRice();
       //返回抽象面包
       Bread MakeBread();

  }


  //定义北方厨师,实现厨师接口
  class NorthChef:Chef
  {
       public Noodle MakeNoodle()
       {
            Console.WriteLine("\n制作北方面条...");
            Noodle noodle=new NorthNoodle();
            return noodle;
       }
       public Rice MakeRice()
       {
            Console.WriteLine("\n制作北方米饭...");
            Rice rice=new NorthRice();
            return rice;
       }
       public Bread MakeBread()
       {
            Console.WriteLine("\n正在制作北方面包..");
            Bread bread=new NorthBread();
            return bread;
       }
  }

  //定义南方厨师,实现厨师接口
  class SouthChef:Chef
  {
       public Noodle MakeNoodle()
       {
            Console.WriteLine("\n正在制作南方面条。。。");
            Noodle noodle=new SouthNoodle();
            return noodle;
       }
       public Rice MakeRice()
       {
            Console.WriteLine("\n正在制作南方米饭。。。");
            Rice rice=new SouthRice();
            return rice;
       }
       public Bread MakeBread()
       {
            Console.WriteLine("\n正在制作南方面包。。。");
            Bread bread=new SouthBread();
            return bread;
       }
  }
 
  //定义面条产品
  public interface Noodle
  {
       //这里定义面条的公共操作
  }

  class NorthNoodle:Noodle
  {
      public NorthNoodle()
      {
            Console.WriteLine("\n一碗地道的北方面条产生了");
      }
  }

  class SouthNoodle:Noodle
  {
       public SouthNoodle()
      {
            Console.WriteLine("\n一碗地道的南方面条产生了");
       }
  }
 
  //定义米饭产品    
  public interface Rice
  {
       //这里定义米饭的公共操作
  }
 
  class NorthRice:Rice
  {
 
       public NorthRice()
       {
            Console.WriteLine("\n一碗地道的北方米饭产生了,真好吃");
       }
  }

  class SouthRice:Rice
  {
 
       public SouthRice()
       {
             Console.WriteLine("\n一碗地道的南方米饭产生了,真难吃");
       }
  }


  //定义面包
  public interface Bread
  {
        / /这里可以定义一些面包的公共操作
  }
 
  class NorthBread:Bread
  {
 
       public NorthBread()
       {
            Console.WriteLine("\n一个地道的北方面包产生了");
       }
  }

  class SouthBread:Bread
  {
       public SouthBread()
       {
            Console.WriteLine("\n一个地道的南方面包产生了");
       }
  }

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
       //针对接口编程,创建对象尽量返回上层接口,避免使用具体类
       //下面隐藏了具体的创建各种面条,米饭和面包的过程
       Chef northChef=new NorthChef();
       northChef.MakeNoodle();
       northChef.MakeRice();
       northChef.MakeBread();
  
       Chef southChef=new SouthChef();
       southChef.MakeBread();
       southChef.MakeNoodle();
       southChef.MakeRice();

       Console.ReadLine();
  }
 }
}
 
分享到:
评论

相关推荐

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    java常用设计模式-抽象工厂模式

    java常用设计模式-抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建...

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    设计模式-抽象工厂模式javademo

    抽象工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定它们的具体类。在Java编程中,抽象工厂模式通常用于实现跨平台或者跨框架的接口,使得系统...

    05_C_设计模式-抽象工厂模式

    他是一种模式,计算机软件开发的一种模式,可以兼容多个数据库,以及数据库之间交互

    PHP5设计模式-抽象工厂模式实现

    PHP实现的抽象工厂模式,大家可以下载来参考学习下。

    3.设计模式-抽象工厂模式1

    抽象工厂模式是一种设计模式,属于创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式可以帮助我们隔离具体类和抽象类之间的耦合,使得系统对扩展友好,...

    Java设计模式教程 - Java设计模式 - 抽象工厂模式

    抽象工厂模式是Java设计模式中的一种创建型模式,它提供了创建对象族的接口,而具体的对象族由子类决定。这种模式的主要目的是隔离接口与实现,使得客户端代码在更换产品族时无需修改,增强了软件的可扩展性和可维护...

    java设计模式----抽象工厂模式

    java设计模式----抽象工厂模式,简单工厂模式代码 代码内部

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    从哲学角度学习设计模式-抽象工厂

    总的来说,"从哲学角度学习设计模式-抽象工厂"这个主题旨在将哲学思考融入到软件设计中,通过抽象工厂模式,我们不仅可以理解如何构建灵活、可扩展的系统,还能体会到哲学思想如何影响并指导我们的编程实践。...

    设计模式--抽象工厂

    抽象工厂模式通常由以下几个角色构成: 1. **抽象工厂(Abstract Factory)**:定义一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在不同的实现中,这个接口会创建出不同系列的产品。 2. **...

    3.java设计模式-创建者模式-抽象工厂模式.pdf

    抽象工厂模式是创建型设计模式中的一种,用于创建一系列相关或相互依赖的对象,而无需指定其具体类。抽象工厂模式强调产品的系列,对于有多个产品等级结构的系统非常有用。在抽象工厂模式中,一个工厂负责创建多个...

    Java设计模式-抽象工厂

    抽象工厂模式是设计模式中的一种结构型模式,它提供了一个创建对象族的接口,但允许子类决定实例化哪一个类。这个模式使代码能够独立于实际的产品实现,增强了代码的可扩展性和灵活性。 ### **1. 模式概念** 抽象...

    c++设计模式-抽象工厂方法

    在C++中,抽象工厂模式通常包含以下角色: 1. **抽象工厂(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C++中,这通常是一个纯虚类,声明了一系列用于创建对象的纯虚函数。 2. **具体工厂...

Global site tag (gtag.js) - Google Analytics