设计模式:工厂方法

简介:

在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,可以根据我们预知动态创建产品类。但是,一旦客户的变化超过预知我们就必须修改我们的源代码(FoodShop工厂)了。

1
2
3
4
5
6
7
8
9
switch  (foodName)
{
     case  "Sugar" :
         return  new  Sugar();                   
     case  "Bread" :
         return  new  Bread();
     default :
         throw  new  ArgumentException();                   
}

 

如何不修改工厂呢,我们这样想,我们去食品专卖店去买,到专门卖糖果的地方买糖果,专门卖面包的地方买面包,当需要买饼干时,增加一个饼干专卖店即可,不用修改工厂

image

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
namespace  DP
{
     class  Client
     {
         static  void  Main( string [] args)
         {
             // 可以从配置文件里确定具体工厂
             // IFoodshop factory = (IFoodshop)Assembly.Load("DP").
             //                     CreateInstance("SugarShop");
             IFoodshop sugarShop = new  SugarShop();
 
             IFood food = sugarShop.CreateFood();
             food.Eat();
             Console.Read();
         }
     }
 
     // 抽象产品
     public  interface  IFood
     {
         void  Eat();
     }
 
     // 具体产品
     public  class  Bread : IFood
     {
 
         public  void  Eat()
         {
             Console.WriteLine( "Bread is delicious!" );
         }
     }
 
     // 具体产品
     public  class  Sugar : IFood
     {
 
         public  void  Eat()
         {
             Console.WriteLine( "Sugar is delicious!" );
         }
     }
 
     // 抽象工厂
     public  interface  IFoodshop
     {
         IFood CreateFood();
         
     }
 
     // 具体工厂
     public  class  SugarShop : IFoodshop
     {
         public  IFood CreateFood()
         {
             return  new  Sugar();
         }
        
     }
 
     // 具体工厂
     public  class  BreadShop : IFoodshop
     {
         public  IFood CreateFood()
         {
             return  new  Bread();
         }
 
     }
     
}

当增加一种食品时,我们只需要创建一个实现IFood的食品和一个实现了IFactory的具体工厂类即可,避免了修改类。

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2009/11/26/1611322.html如需转载请自行联系原作者


王德水

相关文章
|
4月前
|
设计模式 Java
常用设计模式(工厂方法,抽象工厂,责任链,装饰器模式)
有关设计模式的其他常用模式请参考 单例模式的实现 常见的设计模式(模板与方法,观察者模式,策略模式)
40 2
|
4月前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
20天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1月前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
1月前
|
设计模式 Java
23种设计模式,工厂方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】工厂方法模式是设计模式中的一种创建型模式,它主要解决的问题是对象创建的问题。它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。
31 3
|
2月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
22 1
|
2月前
|
设计模式 Java Spring
设计模式之工厂方法
设计模式之工厂方法
设计模式之工厂方法
|
7月前
|
设计模式 uml
解锁设计模式的神秘面纱:编写无懈可击的代码之工厂方法设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之工厂方法设计模式
22 0
|
4月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
103 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
4月前
|
设计模式 Go 开发工具
Golang设计模式——01工厂方法模式
Golang设计模式——01工厂方法模式
23 0