设计模式 Factory + Builder

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽象建造者角色(Builder):给出一个抽象接口,以规范产品对象的各个 组成成分的建造 具体建造者角色(Concrete Builder):担任这个角色的是与应用程序紧密 相关的一些类,它们在应用程序调用下创建产品的实例. 导演者角色(Director):担任这个角色的类调用具体建造者角色以创建产 品对象. 产品角色(Product):一个系统中会有多于一个的产品类,而这些产品并 不定有共同的接口
Builder
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可 以创建不同的表示. Builder的目标是从" 不同的表示"分离出构建过程.这里, 构建过程是必须是相同的,但是产生的结果却有不同的表现. Factory构建具体一个产品,而Builder构建是一个产品中的一 部分. Builder涉及到四个角色:
需要生成的产品对象有复杂的内部结构. 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序. 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品 对象的创建过程中不易得到.

事例
请参见工程Factory
com.nect.methodFactory包下事例 工厂方法模式的意义是定义一个创建产品 对象的工厂接口,将实际 创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样 核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接 口,这 样进一步抽象化的好处是使得工厂方法模式可以使系统在不 修改具体工厂角色的情况下引进新的产品.
简单工厂模式涉及到工厂角色,抽象产品角 色以及具体产品角色
工厂类(Creator)角色:担任这个角色是工厂方法 模式的核心,含有与应用紧密相关的业务逻辑. 工厂类在客户端的直接调用下创建产品对象,它 往往由一个具体Java类实现. 抽象产品(Product)角色:担任这个角色的类是由 工厂方法模式所创建的对象的父类,或它们共同 拥有的接口.抽象产品角色可以用一个Java接口 或者Java抽象类实现. 具体产品(Concrete Product)角色:工厂方法模 式所创建的任何对象都是这个角色的实例,具体 产品角色由一个具体Java类实现.
事例
请参见工程Factory
com.nec.abstractFactory包下事例 抽象工厂模式关键在于工厂类是多层次的,有父工厂类和子工厂类, 父工厂类可以产生子工厂类,再由子工厂类生产出产品,这样产品 也可以是由复杂关系的,也可以说多种的. 工厂方法模式,将的是由一个方法,可以产生不同的但是同类的 (或者同接口的)产品.工厂方法模式就能满足一般的需要.复杂 情况下才用抽象工厂模式.
事例
请参见工程Builder
com.nec.builder.part包 下事例
Builde可以改变它所构建的产品的内部表示,还隐藏了产品 如何装配的细节. 每个特定的Builder与其它Builder及程序的其余部分无关.这 增强了程序的模块性,并使额外模块变得相对简单. 由于每个Builder是根据数据逐步构建最终产品的,因此可以 对Builder所构建的每个最终产品拥有更多的控制. Builder与Factory都返回由多个方法和对象组成类,它们主要 区别在Factory返回一系列的相关类,而Builder是根据所提供 的数据将逐步构建一个复杂的对象 以下情况应当使用建造者模式:
在以下情况下应当考虑使用抽象工厂模式:
一个系统不应当依赖于产品类实例如何被创建,组合和表达的细节, 这对于所有形态的工厂模式都是重要的. 这个系统有多于一个的产品族,而系统只消费其中某一产品族. 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统 的设计中体现出来. 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使 客户端不依赖于实现.
Simple Factory
在面向对象的程序中经常见到的一种模式就是 简单工厂模式(Simple Factory).一个简单工 厂模式根据所提供的数据返回某个类的一个实 例,此类是多个可能的类中的一个.通常它返 回的类都具有共同的父类和共同的方法,但是 每个类执行的任务各不相同,Baidu Nhomakorabea且针对不同类 型的数据进行了优化.
Abstract Factory
抽象工厂模式是比工厂方法模式更抽象的一种模式.使用这种模式能返 回多个相关对象类别中的一个. 抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的 是一个产品等级结构;而抽象工厂模式需要面对多个产品等级结构
抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心, 它是与应用系统商业逻辑无关的. 具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建 产品的实例.这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应 用系统的商业逻辑紧密相关的. 抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所 创建的对象的父类,或它们共同拥有的接口. 具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象 都是某一个具体产品类的实例.这是客户端最终需要的东西,其内部一定充 满了应用系统的商业逻辑.
事例
请参见工程Factory
com.nect.simpleFactory包下事例 简单工厂模式首先要创建一个提取方法, 他能在多个可能的类中决定返回哪一个 类的实例,并将其返回.然后就可以调 用该类实例的方法,而不必了解实际使 用的是哪一个子类.
Factory Method
工厂方法模式是一种更灵活的模式, 它扩展了子类实例化的思想,即不再 由单个工厂类决定到底应该实例化哪 个子类.而超类则会将这一决定推迟 到每个子类中完成. 抽象工厂(Creator)角色:是工厂方 法模式的核心,与应用程序无关.任 何在模式中创建的对象的工厂类必须 实现这个接口. 具体工厂(Concrete Creator)角色: 这是实现抽象工厂接口的具体工厂类, 包含与应用程序密切相关的逻辑,并 且受到应用程序调用以创建产品对象. 在上图中有两个这样的角色: BulbCreator与TubeCreator. 抽象产品(Product)角色:工厂方 法模式所创建的对象的超类型,也就 是产品对象的共同父类或共同拥有的 接口.在上图中,这个角色是Light. 具体产品(Concrete Product)角色: 这个角色实现了抽象产品角色所定义 的接口.某具体产品有专门的具体工 厂创建,它们之间往往一一对应.
Factory Method 与Simple Factory 区别
工厂方法模式与简单工厂模式再结构上的不同不是很明 显.工厂方法类的核心是一个抽象工厂类,而简单工厂 模式把核心放在一个具体类上. 工厂方法模式之所以有一个别名叫多态性工厂模式是因 为具体工厂类都有共同的接口,或者有共同的抽象父类. 当系统扩展需要添加新的产品对象时,仅仅需要添加一 个具体对象以及一个具体工厂对象,原有工厂对象不需 要进行任何修改,也不需要修改客户端,很好的符合了 "开放-封闭"原则.而简单工厂模式在添加新产品对象 后不得不修改工厂方法,扩展性不好
Factory
工厂模式专门负责将大量有共同接口的类实例化.工厂模式可 以动态决定哪一个类实例华,不必事先知道每次要实例化哪一 个类. 工厂模式有以下几种形态: 简单工厂模式(Simple Factory) 又称静态工厂方法模式(Static Factory Method Pattern) 工厂方法模式(Factory Method): 又称多态性工厂模式(Polymorphic Factory)或者虚拟构造子 模式(Virtual Constructor) 抽象工厂模式(Abstract Factory) 又称工具模式(Kit 或者Toolkit)
相关文档
最新文档