工厂模式之二 - 工厂方法(Factory Method)

简介: 工厂方法(Factory Method)模式又叫做多态性工厂(Polymorphic Factory)。 简单工厂模式的优缺点 优点:将类的创建逻辑从客户端移入工厂类。 缺点:对开-闭原则支持不够,如果有新类加入,必须修改工厂类的逻辑。

工厂方法(Factory Method)模式又叫做多态性工厂(Polymorphic Factory)。

简单工厂模式的优缺点

优点:将类的创建逻辑从客户端移入工厂类。

缺点:对开-闭原则支持不够,如果有新类加入,必须修改工厂类的逻辑。

 

工厂方法克服了简单工厂模式的缺点,引入了多态性。

 

工厂方法和简单工厂的区别:

简单工厂模式的核心是一个具体类,工厂方法模式的核心是一个抽象类。

 下面我们来看一下工厂方法的具体实现,我们还是以画图程序为例子。

图形的代码结构和简单工厂类似,读者可以参看简单工厂的代码,分别是IShape接口, Circle, Rectangle, Triangle类。

区别在于:

我们新定义了一个工厂接口,如下:

 

namespace  designpattern.cs.FactoryMethod
{
    
public   interface  IShapeFactory
    {
        IShape Create();
    }
}

 

 这样,如果每增加一个新类,我们就增加一个工厂类,该工厂类实现工厂接口,如下:

 

namespace  designpattern.cs.FactoryMethod
{
    
public   class  CircleFactory:IShapeFactory
    {
        
public  IShape Create()
        {
            
return   new  Circle();
        }
    }
}

namespace  designpattern.cs.FactoryMethod
{
    
public   class  RectangleFactory : IShapeFactory
    {
        
public  IShape Create()
        {
            
return   new  Rectangle();
        }
    }
}

namespace  designpattern.cs.FactoryMethod
{
    
public   class  TriangleFactory : IShapeFactory
    {
        
public  IShape Create()
        {
            
return   new  Triangle();
        }
    }
}

 

最后,在客户端中我们可以根据不同的工厂类来创建不同的业务类,如下:

 

using  System;

namespace  designpattern.cs.FactoryMethod
{
    
public   class  ClientDemo1
    {
        
static   void  Main( string [] args)
        {
            IShape shape1,shape2,shape3;
            IShapeFactory factory1,factory2,factory3;

            
// draw circle
            factory1  =   new  CircleFactory();
            shape1 
=  factory1.Create();
            shape1.draw();
            shape1.erase();

            
// draw rectangle
            factory2  =   new  RectangleFactory();
            shape2 
=  factory2.Create();
            shape2.draw();
            shape2.erase();

            
// draw triangle
            factory3  =   new  TriangleFactory();
            shape3 
=  factory3.Create();
            shape3.draw();
            shape3.erase();
            
            Console.ReadLine();
        }
    }
}

 

总结:工厂方法更好地支持了“开-闭”原则: 对修改关闭,对增加开放。

         因此,每增加一个业务类,我们改变了以往修改工厂类逻辑的做法,因为在实际项目中,工厂类

 可能已经很复杂了,修改容易出错,引起连锁反应。因此,我们选择增加工厂类。

         在工厂方法中,业务类和工厂类一一对应,数量相等,而工厂类都实现某个抽象接口,具有统一的原型。

 

目录
相关文章
|
6月前
|
设计模式
设计模式5 - 工厂方法模式【Factory Method Pattern】
设计模式5 - 工厂方法模式【Factory Method Pattern】
20 0
|
设计模式 Java
设计模式学习(七):Factory Method工厂模式
在Template Method模式中,我们在父类中规定处理的流程,在子类中实现具体的处理。如果我们将该模式用于生成实例,它就演变为本章中我们所要学习的Factory Method模式。
设计模式学习(七):Factory Method工厂模式
|
设计模式
《一天一个设计模式》----工厂方法模式(Factory Method)
《一天一个设计模式》----工厂方法模式(Factory Method)
76 0
《一天一个设计模式》----工厂方法模式(Factory Method)
|
设计模式 缓存 算法
Factory Method工厂方法模式(Java代码实现)——创建型模式
Factory Method工厂方法模式(Java代码实现)——创建型模式
154 0
Factory Method工厂方法模式(Java代码实现)——创建型模式
|
设计模式 数据库
【愚公系列】2021年12月 二十三种设计模式(一)-工厂方法模式(Factory Method Pattern)
【愚公系列】2021年12月 二十三种设计模式(一)-工厂方法模式(Factory Method Pattern)
【愚公系列】2021年12月 二十三种设计模式(一)-工厂方法模式(Factory Method Pattern)
|
XML 存储 设计模式
JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
文章为转载:代码为自己写的和改编的。 本节主要代码: https://yunpan.cn/cqa24JbQmyxp7 访问密码 b917 转载自小若博客:http://blog.csdn.net/lovesomnus/article/details/46634987
323 0
JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
|
设计模式
设计模式二: 工厂方法(Factory Method)
简介 工厂方法模式是创建型模式的一种, 核心结构有四个角色: 抽象工厂,具体工厂,抽象产品,具体产品; 实现层面上,该模式定义一个创建产品的接口,将实际创建工作推迟到具体工厂类实现, 一个产品对应一个工厂, 这样的好处是当有新产品引入时可以不修改具体的工厂角色. 意图 定义了一个创建对象的接口,但由子类决定要实例化哪个类。
825 0
|
关系型数据库 Go C#
C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
原文:C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】 一、引言       在上一篇文章中我们讲解了过渡的一种模式叫做【简单工厂】,也有叫【静态工厂】的,通过对简单工厂模式得了解,我们也发现了它的缺点,就是随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化越多,里面的If--Else--也越多,这样就会造成简单工厂的实现逻辑过于复杂。
1541 0