23种设计模式第四篇:java生成器模式
定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。
四个要素:
Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,也被称导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。
示例:
网上有用KFC的例子来描述生成器模式,比较通俗易懂。
假设KFC推出两种套餐:奥尔良鸡腿堡套餐和香辣鸡腿堡套餐。
奥尔良套餐包括:一个奥尔良鸡腿堡、一个炸鸡翅、一杯雪碧。
鸡腿堡套餐包括:一个香辣鸡腿堡、一份薯条、一杯可乐。
每份套餐都是:主食、副食、饮料。
KFC服务员要根据顾客的要求来提供套餐,那这个需求里面什么是固定的,什么是变化的呢?很明显顾客都是要的套餐,顾客的目的是一样的。 套餐里面都是主食、副食、饮料,这也是固定的。至于主食是什么、副食是什么、饮料是什么,这个是变化的。
在实际的软件开发过程中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象采用一定的组合构成,由于需求的变化,这个复杂对象的各个部分或者其子对象经常要变化(例如,鸡腿堡套餐的顾客不喜欢可乐,要换奶茶),但是他们的结构却相对稳定(套餐都得是一份主食,副食及饮料)。当遇到这种场景时,使用生成器模式比较合适。
定义一个产品类:
public class Entity1{...} public class Entity2{...} public class Entity3{...} public class Product{ Entity1 entity1; Entity2 entity2; Entity3 entity3; }
产品类中的各个小模块是不一样的,由他们建造组成产品。
根据具体场景要求,定义n个生成器类:
public interface IBuild{ public void createEntity1(); public void createEntity2(); public void createEntity3(); public Product composite(); public Product create(); } public class BuildProduct implements IBuild{ Product p = new Product(); public void createEntity1(){ //p.entity1 = ... } public Product create(){ return composite(); } ...... } public class BuildProduct1 implements IBuild{ Product p = new Product(); public void createEntity1(){ //p.entity1 = ... } ...... }
定义一个指挥者类,统一调度project:
public class Director{ private IBuild build; public Director(IBuild build){ this.build = buid; } public Product build(){ build.create(); } public static void main(){ IBuild build = new BuildProduct(); Director direcotr = new Director(build); Prodcut p = director.build(); } }
优点:
1、使用生成器模式可以使客户端不必知道产品内部组成的细节。
2、具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3、由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点:
建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。(待考证,笔者这里不是很理解,欢迎说自己的见解)
应用场景:
1、需要生成一个产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。
2、需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。
3、在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到
转自:java知音
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。本文将介绍23种设计模式。
本文向大家介绍23种设计模式(9) java桥接模式,包括了23种设计模式(9) java桥接模式的使用技巧和注意事项,需要的朋友参考一下 介绍 桥接模式 (Bridge)将抽象部分与实现部分分离,使它们都可以独立的变化。 桥接模式是一种结构式模式。 结构 代码实现 Implementor : 定义实现接口。 Abstraction : 定义抽象接口。 ConcreteImplementor :
本文向大家介绍23种设计模式(1) java单例模式,包括了23种设计模式(1) java单例模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第四篇:java单例模式 定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。 特点: 1、单例类只能有一
本文向大家介绍23种设计模式(3) java原型模式,包括了23种设计模式(3) java原型模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第三篇:java原型模式 定义: 通过复制现有的对象实例来创建新的对象实例。 实现: 实现Cloneable接口: Cloneable接口的作用是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。
本文向大家介绍23种设计模式(2) java工厂模式,包括了23种设计模式(2) java工厂模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
本文向大家介绍23种设计模式(10)java组合模式,包括了23种设计模式(10)java组合模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第四篇:java组合模式 介绍 组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕. 组合模式可以优化处理递归或分级数据结