生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示。
适用性:
1.         当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时
2.         当构造过程必须允许被构造的对象有不同的表示时。
参与者:
生成器Builder:为创建一个Product对象的各个部件指定抽象接口(AnimalBuilder)。
具体生成器ConcreteBuilder:实现Builder接口一构造和装配该产品的各个部件。
定义并明确他所创建的表示,
提供一个检索产品的接口(getAnimal)。
导向器:构建一个适用Builder对象的接口。
Product(Checken,pig):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终的产品。
图1
当客户需要一个产品时,把需要的参数传递个导向器,导向器根据传递的参数调用具体的生成器,具体的生成器通过一系列的操作(getAnimal()通过调用其它的接口方法实现)最会返回一个产品。
Bridge模式的优点:
1.         它使你可以改变一个产品的内部表示,Builder对象提供给导向器一个构造产品的抽象接口,该接口使得生成器可以隐藏这个产品的表示和内部结构,他同时也隐藏了该产品是如何装配的,因为产品时通过抽象接口构造的(注:本例子把接口的实现放在具体类中了),你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
2.         他将构造代码和表示代码分开,这有点类似于模板模式。所不同的是模版模式最终是完成复杂的工作,而生成器的目的是要生成一个复杂的对象。
3.         他使得你对构造过程进行更加精细的控制。Builder模式是在导向者的控制下一步一步构造产品的,仅当该产品完成时,导向者才从生成器中取回产品。因此Builder模式能更好的反映产品的构造过程,使你可以更精细的控制构建过程,从而能更精细的控制所的产品的内部结构。
代码示例:
AnimalBuilder:代码
package builder;
public interface AnimalBuilder{
    public void buildName();
    public void buildLegs();
    public void buildMeat();
    public Animal getAnimal();
}
ChickenBuilder的代码:
package builder;
public class ChickenBuilder implements AnimalBuilder{
    private Animal chicken = null;
    public ChickenBuilder(){
       chicken = new Animal();
    }
    public void buildName(){
       chicken.setName("chicken");
    }
    public void buildLegs(){
       chicken.setLegs(2);
    }
    public void buildMeat(){
       chicken.setMeat("chicken");
    }
    public Animal getAnimal(){
       buildName();
       buildLegs();
       buildMeat();
       return chicken;
    }
}
Animal代码:
package builder;
public class Animal{
    private String name;
    private String meat;
    private int legs;
    public String getName(){
       return name;
    }
    public String getMeat(){
       return meat;
    }
    public int getLegs(){
       return legs;
    }
    public void setName(String aName){
       name = aName;
    }
    public void setMeat(String aMeat){
       meat = aMeat;
    }
    public void setLegs(int alegs){
       legs = alegs;
    }
}
Director代码:
package builder;
public class Director{
    public Animal getAnimal(String aName){
       if(aName.equals("chicken")){
           return new ChickenBuilder().getAnimal();
       }
       else if(aName.equals("pig")){
           return new PigBuilder().getAnimal();
       }
       else return null;
    }
}
客户端代码:
package builder;
public class Client{
    public static void description(Animal animal){
       String desc = "This animal is called "+animal.getName();
       desc +="\n Its meat is "+animal.getMeat();
       desc +="\n And it has "+animal.getLegs()+" legs.";
       System.out.println(desc);
    }
    public static void main(String[] args){
       String aName = "chicken";
       Director d = new Director();
       Animal animal =d.getAnimal(aName);
       description(animal);
       aName = "pig";
       animal = d.getAnimal(aName);
       description(animal);
    }
}
结论:生成器模式使得客户可以更加精细的控制一个对象的构建,每个具体的创建者包含了创建和装配一个特定产品的所有代码,这些代码只用写一次,便可以被不同的Director使用,从而可以装配出不同的对象。

附件:http://down.51cto.com/data/2348252

本文转自凌辉博客51CTO博客,原文链接http://blog.51cto.com/tianli/34089如需转载请自行联系原作者

lili00okok

生成器模式(Builder)解析例子相关推荐

  1. 二十三种设计模式[3] - 生成器模式(Builder Pattern)

    前言 生成器,又名建造者模式,属于创建型模式.在<设计模式 - 可复用的面向对象软件>一书中对它的描述为" 将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表 ...

  2. C#设计模式——生成器模式(Builder Pattern)

    一.概述 在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封 ...

  3. 《研磨设计模式》chap8 生成器模式Builder

    场景:现有一"导出数据"的需求,分别导出到文本和xml. 1. 正常编码 /*** 导出数据到文本文件的对象*/ public class ExportToTxt {/*** 导出 ...

  4. 解释器模式(interpreter)解析例子

    摘要:本文深入浅出的讲述了设计模式中的解释器模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 解释器模式属于行为型模式,其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该 ...

  5. 模板模式(template)解析例子

    摘要:本文深入浅出的讲述了设计模式中的模板模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 模板模式属于行为型模式,其意图是定义一个操作的算法骨架,而将一些步骤延迟到子类中,可以不改变一个算法的 ...

  6. 设计模式笔记——生成器模式(Builder Pattern)

    一.概述 在软件系统中,把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了类的逻辑.它把一个复杂对象的构造过程从对象的表示中分离出来了,其直接效果是将一个复杂的对象简化为一个比较简单的目标对象. ...

  7. 迭代器模式(Iterator)解析例子

    摘要:本文深入浅出的讲述了设计模式中的迭代器模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 迭代器模式属于行为型模式,其意图是提供一种方法顺序访问一个聚合对象中得各个元素,而又不需要暴露该对象 ...

  8. 桥接模式(Bridge)解析例子

    桥接模式属于对象结构型模式,其意图是将抽象的部分和它的实现部分分离,使他们都可以独立的变化.当一个抽象可能有多个实现时,通常用继承来协调他们.抽象类的定义对该抽象的接口.而具体的子类则用不同的方式加以 ...

  9. .Net 设计模式进阶之路——生成器模式[Builder]

    「本文是月更第1天文章.对我来说,这是一个挑战,虽然很早就读过设计模式,但已经还回给了书本,这次拿来无非是想挑战下自己的输出能力,加油,webmote」

最新文章

  1. 改变电子商务行业业务的人工智能趋势
  2. linux线程同步之互斥锁——linux的关键区域
  3. 【Lucene】Lucene的使用和优化
  4. python大型项目中的日志模块_Python中日志模块的使用
  5. [WF2011] MachineWorks(李超树优化dp)
  6. BootstrapTable静态刷新表格
  7. 诺基亚赢得运营商Orange比利时5G合同,华为回应...
  8. mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云
  9. man statd(rpc.statd中文手册)
  10. 软件基本功:垃圾代码的共同特征
  11. 《黑马程序员 MySQL数据库入门到精通,从MySQL安装到MySQL高级、MySQL优化全囊括》——学习笔记基础篇
  12. 游戏蛮牛Egret游戏引擎视频教程
  13. 本地win10服务器不能复制文件,解决Win10无法复制文件并提示“0x80070032”错误的方法...
  14. 《iPhone-电脑文件导入苹果手机》
  15. 深度linux怎样设置显卡,在Deepin系统中安装英伟达NVIDIA显卡驱动的方法
  16. PDF是如何在线分割的?
  17. 我国亟待建立全国危化品安全监管大数据平台
  18. FFmpeg入门详解之11:H264BSAnalyzer简介
  19. 华为eNSP基础命令
  20. 实现多态的三个必要条件

热门文章

  1. 你好AI丨重读图灵经典之作,九条反驳意见引人深思
  2. 道阻且长,Libra 项目负责人长文回应一切质疑
  3. 号称能自动编程60年,“进化计算”究竟进化到哪一步了?
  4. 机会与挑战:2019人工智能应用趋势预测
  5. OpenAI详细解析:攻击者是如何使用「对抗样本」攻击机器学习的
  6. Nature:揭示大脑中的免疫记忆
  7. ACM公布2017年图灵奖,大卫·帕特森和约翰·轩尼诗获奖
  8. 一位职场老鸟的 10 年复盘,帮你避坑不吃亏!
  9. UNIX 之父和 Linux 之父:创造新系统真的只是个意外 | 赠书
  10. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一