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

建造者模式的4个角色:

Product产品类:通常是实现了模版方法模式,有模版方法和基本方法。

Builder抽象建造者:规范产品的组建,一般是由子类实现。

ConcreteBuilder具体建造者:实现抽象建造者定义的所有方法,并且返回一个组建好的对象。

Director导演类:负责安排已有模块的顺序,然后告诉Builder开始构建。

package com.juno.BuilderPattern;import java.util.ArrayList;public abstract class Product {public final static int MSG_OPERATE_1 = 1;public final static int MSG_OPERATE_2 = 2;private ArrayList<Integer> sequence = new ArrayList<Integer>();protected abstract void operate1();protected abstract void operate2();public final void doSomething() {if(sequence.size() == 0) {return;}for(int msg : sequence) {if (msg == MSG_OPERATE_1) {operate1();} else if (msg == MSG_OPERATE_2) {operate2();}}} public final void setSequence(ArrayList<Integer> sequence) {this.sequence = sequence;}
}
package com.juno.BuilderPattern;public class ConcreteProductA extends Product {@Overrideprotected void operate1() {System.out.println("ProductA use MSG_OPERATE_1 operate1~~");}@Overrideprotected void operate2() {System.out.println("ProductA use MSG_OPERATE_2 operate2~~");}}
package com.juno.BuilderPattern;public class ConcreteProductB extends Product {@Overrideprotected void operate1() {System.out.println("ProductB use MSG_OPERATE_1 operate1~~");}@Overrideprotected void operate2() {System.out.println("ProductB use MSG_OPERATE_2 operate2~~");}}
package com.juno.BuilderPattern;import java.util.ArrayList;public abstract class Builder {public abstract void setPart(ArrayList<Integer> sequence);public abstract Product buildProduct();
}
package com.juno.BuilderPattern;import java.util.ArrayList;public class ConcreteBuilderA extends Builder {private ConcreteProductA productA = new ConcreteProductA();@Overridepublic void setPart(ArrayList<Integer> sequence) {this.productA.setSequence(sequence);}@Overridepublic ConcreteProductA buildProduct() {return this.productA;}}
package com.juno.BuilderPattern;import java.util.ArrayList;public class ConcreteBuilderB extends Builder {private ConcreteProductB productB = new ConcreteProductB();@Overridepublic void setPart(ArrayList<Integer> sequence) {this.productB.setSequence(sequence);}@Overridepublic ConcreteProductB buildProduct() {return this.productB;}}
package com.juno.BuilderPattern;import java.util.ArrayList;public class Director {private ArrayList<Integer> sequence = new ArrayList<Integer>();private ConcreteBuilderA productABuilder = new ConcreteBuilderA();private ConcreteBuilderB productBBuilder = new ConcreteBuilderB();public ConcreteProductA getProductA1() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);sequence.add(Product.MSG_OPERATE_2);productABuilder.setPart(sequence);return productABuilder.buildProduct();}public ConcreteProductA getProductA2() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);productABuilder.setPart(sequence);return productABuilder.buildProduct();}public ConcreteProductB getProductB1() {sequence.clear();sequence.add(Product.MSG_OPERATE_1);sequence.add(Product.MSG_OPERATE_2);productBBuilder.setPart(sequence);return productBBuilder.buildProduct();}public ConcreteProductB getProductB2() {sequence.clear();sequence.add(Product.MSG_OPERATE_2);productBBuilder.setPart(sequence);return productBBuilder.buildProduct();}
}
package com.juno.BuilderPattern;public class Client {public static void main(String[] args) {Director director = new Director();System.out.println("== ProductA1 ==");director.getProductA1().doSomething();System.out.println("== ProductA2 ==");director.getProductA2().doSomething();System.out.println("== ProductB1 ==");director.getProductB1().doSomething();System.out.println("== ProductB2 ==");director.getProductB2().doSomething();}
}
打印:
== ProductA1 ==
ProductA use MSG_OPERATE_1 operate1~~
ProductA use MSG_OPERATE_2 operate2~~
== ProductA2 ==
ProductA use MSG_OPERATE_1 operate1~~
== ProductB1 ==
ProductB use MSG_OPERATE_1 operate1~~
ProductB use MSG_OPERATE_2 operate2~~
== ProductB2 ==
ProductB use MSG_OPERATE_2 operate2~~

Java设计模式笔记(5)建造者模式相关推荐

  1. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  2. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  3. JAVA设计模式之【建造者模式】

    建造者模式 建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品 角色 Builder抽象建造者 buildPartX getResult ConcreteBuilder具体建 ...

  4. [设计模式笔记]4.建造者模式

    主要解决:在整个软件系统中,面临着一个复杂对象的创建工程,通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个负载对象的各个部分面临着剧烈的变化. 何时使用:一些基本部分不变,而组合经常变化时 ...

  5. JAVA设计模式笔记(简单工厂模式)

    有一个水果加工工厂,我们的需求是实现加工水果的功能.常见的做法是创建一个水果抽象类,写一个抽象的加工方法,然后创建具体的水果类去继承抽象类,再去实现抽象方法,最后客户端再去新建对象实例. public ...

  6. 重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获!

  7. java 设计模式实战,建造者模式之生产线

    非常感谢你阅读本文,欢迎[

  8. Java设计模式笔记——七个结构型模式

    系列文章目录 第一章 Java设计模式笔记--七大设计原则 第二章 Java设计模式笔记--六个创建型模式 文章目录 系列文章目录 一.适配器模式 1.概念 2.类适配器 3.对象适配 4.缺省适配器 ...

  9. java设计模式4--建造者模式(Builder)

    本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...

  10. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

最新文章

  1. #读书笔记 Android-Activity启动模式
  2. mysql 日期区间创建_按日期范围统计数据
  3. 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...
  4. [体感游戏]关于体感游戏的一些思考(三) --- 射击
  5. redis sentinel哨兵配置及日志分析(grep -v)
  6. 4.9 行列均不满秩方程
  7. 监听网页微信扫码支付成功_网付扫码点餐新福利,消费者点餐可获微信支付金币奖励...
  8. [LUOGU] P2024 食物链
  9. Elasticsearch--进阶-bool复合查询---全文检索引擎ElasticSearch工作笔记013
  10. oracle如何删除物理表空间,oracle 如何删除被误删物理文件的表空间
  11. 系统篇: ext4 文件系统
  12. ESP8266——入门:点亮TFT液晶屏(五)
  13. 国外计算机核心期刊易读,国内英语写作研究现状的文献综述——对十大外语类核心期刊近五年(2012-2016)的统计分析...
  14. 据说深圳电子烟工厂生产了全球产量的90%,为了了解一下这个行业,我做了以下分析
  15. S4 HANA MRP LIVE
  16. mingw32-make[1]: *** [debug/qrc_resource.cpp] Error 1
  17. android 自动替换资源文件,简单高效的实现Android App全局字体替换
  18. 【英语】--动起来的英语进度
  19. 数学建模|预测方法:马尔科夫预测
  20. canvas实现黑客帝国效果

热门文章

  1. node process.env.NODE_ENV 使用 cross-env 配置 设置
  2. 如何手动修改oracle表空间,ORACLE数据库创建和修改表空间
  3. spring mvc框架请求注解解析,内部资源视图解析器
  4. 基于mxnet的Regression问题Kaggle比赛代码框架
  5. matlab this指针,C++ this指针(直戳本质)
  6. windows下解决pip安装出错问题
  7. centos踩坑指南之安装composer
  8. python shelve模块
  9. Vector的使用详解
  10. setState是异步还是同步?