博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[设计模式]建造模式
阅读量:2215 次
发布时间:2019-05-07

本文共 3073 字,大约阅读时间需要 10 分钟。

建造模式(创建型模式)

场景

我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建非常复杂,有很多步骤需要处理时,可以使用创造模式.

什么是建造模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

建造模式的本质

–分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

–由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

实际举例

飞船/轨道舱/发动机/逃逸仓的实体类,这里为了方便合在了一起

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;	}			}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 EscapeTower{	private String name;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public EscapeTower(String name) {		super();		this.name = name;	}	}

构建飞船组件的接口:

public interface AirShipBuilder {	Engine builderEngine();	OrbitalModule builderOrbitalModule();	EscapeTower  builderEscapeTower();}

组装飞船的接口:

public interface AirShipDirector {	AirShip   directAirShip();	}

构建飞船组件的实现类:

public class AirShipBuilder implements AirShipBuilder {		@Override	public Engine builderEngine() {		System.out.println("构建牌发动机!");		return new Engine("神舟牌发动机!");	}	@Override	public EscapeTower builderEscapeTower() {				System.out.println("构建逃逸塔");		return new EscapeTower("神舟牌逃逸塔");	}	@Override	public OrbitalModule builderOrbitalModule() {		System.out.println("构建轨道舱");		return new OrbitalModule("神舟牌轨道舱");	}		}

组件飞船的实现类:

public class AirshipDirector implements AirShipDirector {	private AirShipBuilder builder;	public AirshipDirector(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();		ship.setEngine(e);		ship.setEscapeTower(et);		ship.setOrbitalModule(o);				return ship;	}}

测试:

public class Client {	public static void main(String[] args) {				AirShipDirector director = new AirshipDirector(new AirShipBuilder());		AirShip ship = director.directAirShip();				System.out.println(ship.getEngine().getName());				ship.launch();			}}

开发中应用场景

–StringBuilder类的append方法

–SQL中的PreparedStatement
–JDOM中,DomBuilder、SAXBuilder

转载地址:http://pnzfb.baihongyu.com/

你可能感兴趣的文章
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>
探索Redis设计与实现5:Redis内部数据结构详解——quicklist
查看>>
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础2 :CAP
查看>>
分布式系统理论基础3: 时间、时钟和事件顺序
查看>>
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论进阶7:Paxos变种和优化
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>
搞懂分布式技术4:ZAB协议概述与选主流程详解
查看>>
搞懂分布式技术5:Zookeeper的配置与集群管理实战
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>