1工厂方法模式

发布时间:2015-12-21 20:34:13   来源:文档文库   
字号:

1工厂方法模式

1.1模式动机

这样一个系统,按钮工厂类可以返回一个具体的按钮实例,如圆形按钮、矩形按钮、菱形按钮等。在这个系统中,如果需要增加一种新类型的按钮,如椭圆形按钮,那么除了增加一个新的具体产品类之外,还需要修改工厂类的代码,这就使得整个设计在一定程度上违反了“开闭原则”。 解决方法是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例,这一特点无疑使得工厂方法模式具有超越简单工厂模式的优越性,更加符合“开闭原则”。

1.2模式结构

以下是它的模式结构,左边是产品,右边是工厂,其中ConcreteProduct实现Product接口,ConcreteFactory实现Factory接口;ConcreteProduct依赖于ConcreteFactory

1.3 模式分析

在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有的代码。

1.4 自己体会

由老师上课讲的例子和下来写作业,体会到可以将工厂模式工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的上帝类,这样便分担了对象承受的压力;而且这样使得结构变得灵活起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有的代 码。可以看出工厂角色的结构也是符合开闭原则的!

例如在作业中造人的例子,当需要建造机器人的时候,只需要添加一个具体的机器人工厂类,它继承了工厂类;添加一个机器人,它继承了人类,然后用机器人工厂建造机器人即可,不需要更改以前的代码。

工厂模式的优势:在系统中加入新产品时,只要添加一个具体工厂和具体产品就可以。

工厂模式的劣势:在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度。

本文来源:https://www.2haoxitong.net/k/doc/69e3c7d6a2161479161128a4.html

《1工厂方法模式.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式