设计模式_建造者模式

Builder Pattern

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。

BenzModel继承CarModel,实现业务,而涉及序列。

BenzBuilder类中有一个私有属性BenzModel,一个设置序列方法和获得BenzModel方法,通过建造者Builder设置序列并且获得对象。

产品

public abstract class CarModel {
 private ArrayList<String> sequence = new ArrayList<String>();

 public abstract void start();

 public abstract void stop();

 public abstract void alarm();

 public abstract void engineBoom();

 public void run() {
  for (int i = 0; i < sequence.size(); i++) {
   String actionName = sequence.get(i);
   if (actionName.equalsIgnoreCase("start")) {
    this.start();
   } else if (actionName.equalsIgnoreCase("stop")) {
    this.stop();
   } else if (actionName.equalsIgnoreCase("alarm")) {
    this.alarm();
   } else if (actionName.equalsIgnoreCase("engineBoom")) {
    this.engineBoom();
   }
  }
 }

 final public void setSequence(ArrayList<String> sequence) {
  this.sequence = sequence;
 }
}
public class BenzModel extends CarModel {

 @Override
 public void alarm() {
  System.out.println("奔驰叫");
 }

 @Override
 public void engineBoom() {
  System.out.println("奔驰轰轰轰");
 }

 @Override
 public void start() {
  System.out.println("奔驰启动");
 }

 @Override
 public void stop() {
  System.out.println("奔驰停止");
 }
}

建造者

public abstract class CarBuilder {

 public abstract void setSequence(ArrayList<String> sequence);

 public abstract CarModel getCarModel();
}
//奔驰组装者
public class BenzBuilder extends CarBuilder {
 private BenzModel benz=new BenzModel();  //这里是关键

 @Override
 public CarModel getCarModel() {
  return this.benz;
 }

 @Override
 public void setSequence(ArrayList<String> sequence) {
  this.benz.setSequence(sequence);
 }
}

这里就可以随便组装啦

public static void main(String[] args) {
   ArrayList<String> sequence=new ArrayList<String>();
   sequence.add("start");
   sequence.add("stop");
   sequence.add("engineBoom");
   BenzBuilder builder=new BenzBuilder();
   builder.setSequence(sequence);
   BenzModel benzModel=(BenzModel) builder.getCarModel();
   benzModel.run();
 }

优点 

封装性好,只告知客户规则的使用即可

独立易扩建

使用场景

相同的方法,不同的执行顺序,产生不同的事件结果时

多个部位或零件,都可以转配到一个对象中,但是产生的运行结果不同时

关键还是顺序的问题

我是菜鸟,我在路上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 12:12:54

设计模式_建造者模式的相关文章

大话设计模式_建造者模式(Java代码)

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 简单描述:1个产品类(可有可无,关键是建造流程),1个抽象建造步骤类,多个具体建造子类(不同的类建造不同的产品),1个指挥者(用于规定建造流程),客户端指定需要建造的具体类型,由指挥者建造好之后,建造者子类返回对应产品给客户 大话设计模式中的截图: 例子代码: Product类: 1 package com.longsheng.builder; 2 3 public class Product { 4 5 pr

05.设计模式_建造者模式

转载自  http://www.cnblogs.com/zhili/p/BuilderPattern.html 一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU.主板.硬盘.显卡.机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到

java设计模式_建造者模式

/**  *   */ package com.wangbiao.design.builder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /**  * @Title: Product.java  * @Package com.wangbiao.design.builder  * @Description: TODO   * @author wangbiao     * @date 

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta

C++设计模式之建造者模式(二)

3.省略指挥者Director的建造者模式 指挥者类Director在建造者模式中扮演非常重要的作用,简单的Director类用于指导具体建造者如何构建产品,它按一定次序调用Builder的buildPartX()方法,控制调用的先后次序,并向客户端返回一个完整的产品对象.Direcotr针对抽象的建造者进行编程,如果需要不同的建造者,只需把建造者传入指挥者类,无需修改之前的代码. 在有些情况下,为了简化系统结构,可以省略指挥者Director,指挥者不再指导产品的创建过程.而是在Builder

大话设计模式_解释器模式(Java代码)

解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 简单描述:一个AbstractExpression类,多个子类,存在一个Interpret方法,转义Context对象的信息.客户端根据信息实例化不同的Expression类,并调用其转义方法(这个过程可以使用简单工厂+反射进行) 大话设计模式中的截图: 代码例子: 假设HTML代码解释器: (1)第一类标签<HTML>(开始)/<HEAD>(头信息)/<BODY&g

大话设计模式_原型模式(Java代码)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 简单描述:即通过实现接口Cloneable重写方法clone(),使得创建新的拷贝对象不需要一个成员一个成员的重新复制,而且可以提高创建对象的效率 Java中要想实现拷贝使用clone()方法,类必须实现Cloneable接口,并且重写Object类中的clone()方法,调用父类的clone()方法即可实现浅复制 代码如下: WorkExperience类: 1 package com.longsheng.prototy

大话设计模式_模板方法模式(Java代码)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 简单描述:多个类的行为是差不多的,只是某些局部不一样,则交由父类中抽象出这些子类中相同的部分,父类中定义出不同的部分的接口(方法),这些不同部分的方法则由子类去实现,通过多态,实现代码的重用 大话设计模式中的截图: 例子代码: AbstractClass类: 1 package com.longsheng.templatemethod; 2 3 public

C++设计模式之建造者模式(三)

4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外,还可以通过Director类来更加精细地控制产品的创建过程,例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用,也就是判断产品中某个部件是否需要被建造.钩子方法的返回类型通常为boolean类型,方法名一般为isXXX(),钩子方法定义在抽象建造者类中.在抽象建造者类中提供钩子方法的默认实现,具体建造者类如果不需要建造某个部件,则该建造者类覆盖抽象建造者类的钩子方法.