抽象工厂模式实例

用户需求:

      用程序模拟以下产品线并代码实现

  

设计思路:

     1.UML图 

2.采用抽象工厂模式,将具体产品从客户代码中分离,容易改变产品的系列,能将一个系列的产品族统一到一起创建。

具体代码实现:

         1.抽象工厂模式实现类

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5
  6 namespace 设计模式作业
  7 {
  8     public class MyClass
  9     {
 10         public interface Burger {
 11              string getBurger();
 12         }
 13         public class KFCBurger :Burger{
 14             public string getBurger() {
 15
 16                 return "我是KFC的巨无霸汉堡";
 17
 18             }
 19         }
 20         public class MCBurger : Burger {
 21             public string getBurger()
 22             {
 23
 24                 return "我是McDonalds的巨无霸汉堡";
 25             }
 26         }
 27         public interface Chicken {
 28              string getChicken();
 29         }
 30         public class KFCChicken : Chicken {
 31             public string getChicken()
 32             {
 33
 34                 return "我是来自KFC的炸鸡";
 35
 36             }
 37         }
 38         public class MCChicken : Chicken {
 39             public string getChicken()
 40             {
 41
 42                 return "我是来自McDonalds的炸鸡";
 43
 44             }
 45         }
 46         public interface Drink {
 47             string getDrink();
 48         }
 49         public class KFCDrink : Drink {
 50             public string getDrink()
 51             {
 52
 53                 return "我是来自KFC的咖啡";
 54
 55             }
 56         }
 57         public class MCDrink : Drink {
 58             public string getDrink()
 59             {
 60                 return "我是来自McDonalds的橙汁";
 61
 62            }
 63         }
 64         public interface AbstractFactory {
 65              Burger createBurger();
 66              Chicken createChicken();
 67              Drink createDrink();
 68         }
 69         public class KFCFactory : AbstractFactory {
 70             public Burger createBurger() {
 71                 return new KFCBurger();
 72             }
 73             public Chicken createChicken() {
 74                 return new KFCChicken();
 75             }
 76             public Drink createDrink() {
 77                 return new KFCDrink();
 78             }
 79
 80         }
 81         public class MCFactory : AbstractFactory
 82         {
 83             public Burger createBurger()
 84             {
 85                 return new MCBurger();
 86             }
 87             public Chicken createChicken()
 88             {
 89                 return new MCChicken();
 90             }
 91             public Drink createDrink()
 92             {
 93                 return new MCDrink();
 94             }
 95
 96         }
 97
 98
 99     }
100 }

  2.KFC生产线实现

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 namespace 设计模式作业
 9 {
10     public partial class WebForm1 : System.Web.UI.Page
11     {
12
13         MyClass.AbstractFactory af = new MyClass.KFCFactory();
14
15         protected void Page_Load(object sender, EventArgs e)
16         {
17
18         }
19
20         protected void Button1_Click(object sender, EventArgs e)
21         {
22             MyClass.Burger kfcburger = af.createBurger();
23             Label1.Text = kfcburger.getBurger();
24
25
26         }
27
28         protected void Button2_Click(object sender, EventArgs e)
29         {
30             MyClass.Chicken kfcckicken = af.createChicken();
31             Label1.Text = kfcckicken.getChicken();
32
33         }
34
35         protected void Button3_Click(object sender, EventArgs e)
36         {
37             MyClass.Drink kfcdrink = af.createDrink();
38             Label1.Text = kfcdrink.getDrink();
39         }
40     }
41 }

    3.McDonalds生产线实现

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7
 8 namespace 设计模式作业
 9 {
10     public partial class WebForm2 : System.Web.UI.Page
11     {
12         MyClass.AbstractFactory af = new MyClass.MCFactory();
13         protected void Page_Load(object sender, EventArgs e)
14         {
15
16         }
17
18         protected void Button1_Click(object sender, EventArgs e)
19         {
20             MyClass.Burger mcburger = af.createBurger();
21             Label1.Text = mcburger.getBurger();
22
23         }
24
25         protected void Button2_Click(object sender, EventArgs e)
26         {
27             MyClass.Chicken mcchicken = af.createChicken();
28             Label1.Text = mcchicken.getChicken();
29
30         }
31
32         protected void Button3_Click(object sender, EventArgs e)
33         {
34             MyClass.Drink mcdrink = af.createDrink();
35             Label1.Text = mcdrink.getDrink();
36
37         }
38     }
39 }

运行结果:

点击KFC按钮

创建KFC的汉堡类

创建KFC的鸡肉类

创建KFC的饮品类

点击McDonalds按钮

创建McDonalds的汉堡类

创建McDonalds的鸡肉类

创建McDonalds的饮品类

体会和感悟:

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。它采用OOP和分层的思想,更好的实现程序的分离,提高程序的易扩展性。抽象工厂在产品族中增加新的产品类型较为困难,因为需要修改已有的抽象工厂类,在一定程度上违反了"开放封闭原则"。通过本次实践,我更好的理解了抽象工厂模式的实现和好处,也更加熟悉运用了c#语言,感受到了代码君的奥秘。

时间: 2024-08-06 11:58:27

抽象工厂模式实例的相关文章

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

三.抽象工厂模式实例 1.数据库实例 数据库User表: #ifndef USER_H #define USER_H #include <string> using std::string; //数据库User表 class User { public: unsigned int  getID() { return m_ID; } void setID(unsigned int n) { m_ID = n; } string getName() { return m_name; } void 

.Net简单工厂模式,工厂模式,抽象工厂模式实例

1.定义   简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.实例 用工人种蔬菜的例子来说明,蔬菜植物的产品器官有根.茎.叶.花.果等5类,因此按产品器官分类也分成5种,分别是根菜类,茎菜类,叶莱类,花菜类以及果菜类.我们以根菜类,茎菜类为例,

抽象工厂模式(Abstract Factory)C#实例

抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 本实例描述了抽象工厂模式的一个使用场景.在动物世界弱肉强食,食肉动物会吃掉食草动物.这是动物世界的规律,因此在动物世界类中有Runfoodchain(运行食物链)方法.在动物世界里总是有食肉动物和食草动物这两个抽象成员.它们之所以是抽象成员是因为他们不是具体的一种动物.而食草动物与食肉动物的区别在

结合实例分析简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式的区别

之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个设计模式,但很多地方都用到了工厂模式,(如解析xml中,jdbc连接数据库等)利用好工厂模式对程序的设计很有用处.工厂模式在一些设计模式的书中分为简单工厂模式,工厂方法模式和抽象工厂模式三类.也有把工厂方法模式划分到抽象工厂模式的,认为工厂方法是抽象工厂模式的特例的一种,就是只有一个要实现的产品接口

Java设计模式—工厂方法模式&amp;抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

大话设计模式:抽象工厂模式

抽象方法模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类. 三种模式的对比:   简单工厂模式 工厂模式 抽象工厂模式 产品 可以有多个但是都属于同一类, 同一等级.都继承产品抽象类. 可以有多个但是都属于同一类,同一等级. 都继承产品抽象类. 可以有不同种类的产品,每类有多中 具体产品: 抽象产品 只能有一个 只能有一个; 多个抽象产品类:每个抽象产品类可 以派生多种具体产品: 抽象工厂类   只能有一个,可以派生出多个具体工厂类: 只有一个,可派生出多个具体工厂类:

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

1. 简介:为创建一组相关或相互依赖的对象提供一个接口,无需指定它们的具体类.抽象工厂模式通常是用于创创建一族产品,并且这族产品分不同的等级:不同的具体工厂类生产不同等级的一族产品. 2. 抽象工厂UML图 3.抽象工厂示意性类图 4.类图分析 从上图可以看出,抽象工厂模式涉及到以下四个角色 4.1:抽象工厂:担任这个角色的是工厂方法模式的核心,它与应用无关,任何在模式中创建对象的工厂都必须实现这个接口,在实际应用中,这个角色由java抽象类或接口来实现 4.2:具体工厂:担任这个角色的是抽象工

JAVA设计模式之抽象工厂模式 (转)

前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件.于是这个工厂开始生产空调和发动机,用来组装汽车.这时候工厂有两个系列的产品:空调和发动机.宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机. 概念: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.比如宝马320系列使用空调型号A和发动机型号A,而宝

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工