23种设计模式(4) java生成器模式
23种设计模式第四篇:java生成器模式 定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。 四个要素: Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作。 示例: 网上有用KFC的例子来描述生成器模式,比较通俗易懂。 KFC服务员要根据顾客的要求来提供套餐,那这个需求里面什么是固定的,什么是变化的呢?很明显顾客都是要的套餐,顾客的目的是一样的。 套餐里面都是主食、副食、饮料,这也是固定的。至于主食是什么、副食是什么、饮料是什么,这个是变化的。 在实际的软件开发过程中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象采用一定的组合构成,由于需求的变化,这个复杂对象的各个部分或者其子对象经常要变化(例如,鸡腿堡套餐的顾客不喜欢可乐,要换奶茶),但是他们的结构却相对稳定(套餐都得是一份主食,副食及饮料)。当遇到这种场景时,使用生成器模式比较合适。 定义一个产品类: public class Entity1{...} public class Entity2{...} public class Entity3{...} public class Product{ Entity1 entity1; Entity2 entity2; Entity3 entity3; } 产品类中的各个小模块是不一样的,由他们建造组成产品。 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、使用生成器模式可以使客户端不必知道产品内部组成的细节。 缺点: 建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。(待考证,笔者这里不是很理解,欢迎说自己的见解) 应用场景: 1、需要生成一个产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。 转自:java知音 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |