`
遥远的救世主
  • 浏览: 6198 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java与模式之简单工厂模式

阅读更多

12、简单工厂模式(Simple Factory)

     简单工厂模式是类的创建模式,又叫做静态工厂方法模式(Static Factory Method)。
12.1、工厂模式的几种形态
    工厂模式专门负责将大量有公共接口的类实例化。
   
形态:
简单工厂模式Simple Factory(静态工厂方法模式Static Factory Method Pattern)、
工厂方法模式Factory Method(多态性工厂模式Polymorphic Factory或虚拟构造子模式Virtual Constructor)、
抽象工厂模式Abstract Factory(工具箱模式Kit、Toolkit)

12.2 引入

12.3 简单工厂模式的结构
     简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
结构:
工厂类负责创建所有的产品,所有的产品都实现一个共有的接口。
角色:
    工厂类角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体java类实现。
    抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或他们的共同接口。抽象产品角色可以用一个java接口或者java抽象类实现。
    具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体的java类实现。

12.4简单工厂模式的实现

多层次的产品结构
    在真实的系统中,产品可以形成复杂的等级结构,比如在树结构上有多个抽象产品和具体产品。这时候,简单工厂模式采取的就是以不变应万变的策略,一律使用同一个工厂类。

    这样设计的好处就是设计简单,产品类的等级结构不会反映到工厂类中来,从而产品类的等级结构的变化也不会影响到工厂类。
    这样做的缺点是,增加新的产品必将导致工厂类的修改。
使用接口或者抽象类
    如果模式所产生的具体产品类彼此之间没有共同的商业逻辑,那么抽象类产品角色就可以有一个接口扮演;相反,如果这些具体产品类彼此之间确实有共同的商业逻辑,那么这些共有的逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类扮演。在一个类型的等级结构里面,共同的代码应当尽量向上移动,以达到共享的目的。

多个工厂方法
    每一个工厂类可以有多于一个的工厂方法,分别负责创建不同的产品对象。
抽象产品角色的省略
    如果系统仅有一个具体产品角色的话,那么就可以省略掉抽象产品角色。
工厂角色与抽象角色的合并
    在有些情况下,工厂角色可以由抽象产品角色扮演。一个抽象产品类同时是子类的工厂
三个角色全部合并
    如果抽象产品角色已经被省略,而工厂角色就可以与具体产品角色合并。换言之,一个产品类为自身的工厂。显然,三个原本独立的角色:工厂角色、抽象产品以及具体产品角色都已经合并成为一个类,这个类自行创建自己的实例。
产品对象的循环使用和登记式的工厂方法

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics