设计模式(五)Builder Pattern建造者模式
在我们日常生活中,如构建一个飞船,一个手机,一栋建筑,都会有非常复杂的组装,这时候应该用到建造者模式
以建造一个飞船为例
案例:造小页飞船
1.飞船各部分元件
package com.littlepage.BuilderPattern; public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
Escape builderEscape();
}
2.飞船实体用来组装
package com.littlepage.BuilderPattern; public class AirShip {
private OrbitalModule orbitalModule;
private Engine engine;
private Escape escape; public void lauch(){
System.out.println("发射");
} public OrbitalModule getOrbitalModule() {
return orbitalModule;
}
public void setOrbitalModule(OrbitalModule orbitalModule) {
this.orbitalModule = orbitalModule;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public Escape getEscape() {
return escape;
}
public void setEscape(Escape escape) {
this.escape = escape;
} }
class OrbitalModule{
private String name; public OrbitalModule(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} } class Engine{
private String name; public Engine(String name) {
this.name=name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} } class Escape{
private String name; public Escape(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
3.创造方法的接口
package com.littlepage.BuilderPattern;
/*
*组装飞船对象
*/
public interface AirShipDirector {
AirShip createAirship();
}
4.实现组件(小页飞船组件)
package com.littlepage.BuilderPattern; public class LittlePageShipBuilder implements AirShipBuilder{ @Override
public Engine builderEngine() {
System.out.println("页牌发动机");
return new Engine("页牌发动机");
} @Override
public OrbitalModule builderOrbitalModule() {
System.out.println("页牌逃逸塔");
return new OrbitalModule("页牌逃逸塔");
} @Override
public Escape builderEscape() {
System.out.println("页牌轨道舱");
return new Escape("页牌轨道舱");
} }
5.实体实现装配
package com.littlepage.BuilderPattern; public class LittlePageAirshipDirector implements AirShipDirector{
private AirShipBuilder builder; public LittlePageAirshipDirector(AirShipBuilder builder) {
this.builder = builder;
} @Override
public AirShip createAirship() {
Engine e=builder.builderEngine();
OrbitalModule om=builder.builderOrbitalModule();
Escape et=builder.builderEscape(); AirShip ship=new AirShip();
ship.setEngine(e);
ship.setOrbitalModule(om);
ship.setEscape(et);
return ship;
} }
6.客户端的串接(测试)
package com.littlepage.BuilderPattern; public class Client {
public static void main(String[] args) {
AirShipDirector dir=new LittlePageAirshipDirector(new LittlePageShipBuilder());
AirShip air=dir.createAirship();
System.out.println(air.getEngine());
air.lauch();
}
}
UML结构图
设计模式(五)Builder Pattern建造者模式的更多相关文章
- Java设计模式(3)建造者模式(Builder模式)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- 设计模式(四)建造者模式 Builder
Builder: <Effective Java> 第2条:遇到多个构造器参数时要考虑用构建器. 建造者模式(Builder Pattern),也称生成器模式,定义如下: 将一个复杂对象的 ...
- 设计模式实战系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- 【转】设计模式(三)建造者模式Builder(创建型)
(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对 ...
- 【设计模式 - 3】之建造者模式(Builder)
1 模式简介 建造者模式也叫生成器模式,和抽象工厂模式相似,也是一种构建复杂对象的模式. 建造者模式中的角色分类: 抽象建造者Builder:接口类型,用于规范各个产品的组成部分: 具体建造 ...
- 设计模式(三)建造者模式Builder(创建型)
1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定 ...
- 设计模式之九:建造者模式(Builder)
建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样同样的建造过程能够创建不同的表示. Separate the construction of a complex object from ...
- 设计模式课程 设计模式精讲 7-2 建造者模式Coding
1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...
随机推荐
- Java 注释规范
基本的要求: 1.注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释.如果在其它项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范 ...
- web项目错误—Java.util.ConcurrentMidificationException
源代码: Iterator<String> iterator = list.iterator(); synchronized(synObject) { while(iterator.has ...
- django的url配置
在一个请求到达的时候,最先达到的就是视图层,然后根据url映射到视图函数.这一部分我们来说明url的配置. 概述 为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(U ...
- django 表单常用field
BooleanField字段:相当于单选框 CharField:接受字符串 参数:max_length最大长度,min_length最小长度 require字段是否是必须的,默认为required=T ...
- java bean属性拷贝工具类比对(性能+功能)
业务系统中经常需要两个对象进行属性的拷贝,不能否认逐个的对象拷贝是最快速最安全的做法,但是当数据对象的属性字段数量超过程序员的容忍的程度比如通常超过5个属性的时候,代码因此变得臃肿不堪,使用一些方便的 ...
- java常用代码段整理(持续更新)
FileWriter指定编码格式 FileWriter 默认是用(ISO-8859-1 or US-ASCII)西方编码的,总之不是UTF-8的,而FileWriter类有getEncoding方法, ...
- request 模块详细介绍
request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...
- Redis热点Key发现及常见解决方案!
一.热点Key问题产生的原因 1.用户消费的数据远大于生产的数据(热卖商品.热点新闻.热点评论.明星直播). 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件 ...
- 【python006-算术操作符】
一.算术运算符: //:指两个数相除求整 **:指一个数的多少次方,3**2 == 3的2次方 %:指两个数相除求余 二.通过学习求余的方式改进求闰年的程序 temp = input("请输 ...
- topcoder srm 697 div1 -3
1.给定长度为$n$ 的数组$b$,构造长度为$n$ 的且没有重复元素的数组$a$,令$p_{i}$表示$a$中除$a_{i}$外其他元素的乘积.构造出的$a$满足$a_{i}^{b_{i}}$能够被 ...