建造者模式(Builder Pattern)
来源:互联网 发布:1月8日制造业数据 编辑:程序博客网 时间:2024/06/06 11:50
什么是建造者模式?
建造者模式(Builder Pattern)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
建造模式的本质
- 分离了对象组件的单独构造(由Builder来负责)和装配(由Driector负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
- 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。
使用场景
- 我们要建造一个复杂产品。比如:神舟飞船,Iphone。这个复杂产品的创建,有这样一个问题要处理:装配这些子组件是不是有个步骤问题?
- 实际开发中,我们所要构建的对象十分复杂,有很多步骤需要处理时。
Java中的应用场景
- StringBuilder类的append方法
- SQL中的PreparedStatement
- JDOM中,DomeBuiler,SAXBuilder
下面以建造神舟5号飞船说明,我们这里只是建造一个简单的神舟5号飞船了,它由发动机,逃逸塔,轨道舱组成,Builder负责构建这些组件,Driector负责将它们装配成神舟5号飞船。
类图
代码
package com.match.builder;/** * Builder接口 * @author Match * */public interface AirShipBuilder{ //构建发动机 Engine builderEngine(); //构建轨道舱 OrbitalModule builderOrbitalModule(); //构建逃逸塔 EscapeTower builderEscapeTower();}package com.match.builder;/** * Director接口 * @author Match * */public interface AirShipDirector{ //组装飞船 AirShip directAirShip();}package com.match.builder;/** * Builder类负责构造组件 * @author Match * */public class AirShip_5Builder implements AirShipBuilder { @Override public Engine builderEngine() { System.out.println("建造发动机"); return new Engine("神舟5号发动机"); } @Override public EscapeTower builderEscapeTower() { System.out.println("建造逃逸塔"); return new EscapeTower("神舟5号逃逸塔"); } @Override public OrbitalModule builderOrbitalModule() { System.out.println("建造轨道舱"); return new OrbitalModule("神舟5号轨道舱"); } }package com.match.builder;/** * Director类负责装配生产成品 * @author Match * */public class Airship_5Director implements AirShipDirector{ private AirShipBuilder builder; public Airship_5Director(AirShipBuilder builder) { this.builder = builder; } @Override public AirShip directAirShip() { Engine e = builder.builderEngine(); OrbitalModule o = builder.builderOrbitalModule(); EscapeTower et = builder.builderEscapeTower(); //装配成飞船对象 AirShip ship = new AirShip(); System.out.println("装配"+e.getName()); ship.setEngine(e); System.out.println("装配"+et.getName()); ship.setEscapeTower(et); System.out.println("装配"+o.getName()); ship.setOrbitalModule(o); return ship; }}package com.match.builder;/** * 发动机 * @author Match * */public 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; }}package com.match.builder;/** * 逃逸塔 * @author Match * */public class EscapeTower{ private String name; public EscapeTower(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }package com.match.builder;/** * 轨道舱 * @author Match * */public 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; }}package com.match.builder;/** * 飞船 * @author Match * */public class AirShip{ private OrbitalModule orbitalModule;//轨道舱 private Engine engine;//发动机 private EscapeTower escapeTower;//逃逸塔 public void launch() { 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 EscapeTower getEscapeTower() { return escapeTower; } public void setEscapeTower(EscapeTower escapeTower) { this.escapeTower = escapeTower; } }
测试代码:
package com.match.builder;public class Client{ public static void main(String[] args) { AirShipDirector director = new Airship_5Director(new AirShip_5Builder()); AirShip ship = director.directAirShip(); ship.launch(); }}
控制台输出:
建造发动机
建造轨道舱
建造逃逸塔
装配神舟5号发动机
装配神舟5号逃逸塔
装配神舟5号轨道舱
发射!
阅读全文
0 0
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式【BUILDER PATTERN 】
- 建造者模式【Builder Pattern】
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式(Builder Pattern)
- 建造者模式-Builder Pattern
- 建造者模式Builder Pattern
- 建造者模式Builder Pattern
- 建造者模式(Builder Pattern)
- Builder Pattern(建造者模式)
- 建造者模式【Builder Pattern】
- 建造者模式(Builder Pattern)
- 建造者模式【Builder Pattern】
- 建造者模式(Builder Pattern)
- 建造者模式(builder pattern)
- Tomcat启用HTTPS协议配置过程
- 第四十天 linux系统
- spring boot 使用profile来分区配置
- windows操作系统安装python和django
- mysql table_id 文章搜刮
- 建造者模式(Builder Pattern)
- SparkSQL内置函数解密与实战学习笔记
- Ceph pool配额设置
- MySQL每秒57万的写入,带你飞~
- java二进制相关基础
- mongo-java-driver -3.2.2学习笔记-04-ssl
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L
- Windows10系统彻底关闭Windows Defender的技巧
- 纯css,div隐藏滚动条,保留鼠标滚动效果。