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

工厂方法(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();
        }
    }
}

 

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

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

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

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

 

转载于:https://www.cnblogs.com/davidgu/archive/2009/06/27/1512212.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值