首页 > 其他分享 >3 设计模式-建造者模式

3 设计模式-建造者模式

时间:2022-10-09 20:11:29浏览次数:32  
标签:Engine return String 建造 模式 build 设计模式 public name

建造者模式

在现实生活中如果我们需要制造一个比较复杂的东西,比如手机,台式电脑,或者汽车等。如果我们要制造一台电脑的话我们会先将电脑所需的各个部件买回来然后在组装起来成为一台电脑。这里电脑所需的各个组件比如显示器,CPU,硬盘等等都是由不同的厂商生产的,然后被我们不同的组合而成了不同的产品。这是现实生活中和建造者模式类似的场景,而在程序中也一样有些情况下我们需要创建比较复杂的对象,在这种场景下我们可以通过建造者模式来实现,

建造模式的本质:

  1. 分离了对象子组件的单独构造(由Builder来负责)装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使.用。
  2. 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用

太空飞船

创建我们的太空飞船类,也就是我们最终的产品类

package com.dpb.build;
/**
 * 太空飞船
 * @author 波波烤鸭
 *
 */
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 String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public OrbitalModule(String name) {
		super();
		this.name = name;
	}
	
	
}

// 发动机
class Engine{
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Engine(String name) {
		super();
		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;
	}
}

组件构造者

/**
 * 定义飞船建造的规则
 * @author dengp
 *
 */
public interface AirShipBuild {

	OrbitalModule buildOrbitalModule();
	Engine buildEngine();
	EscapeTower buildeEscapeTower();
}

package com.dpb.build;

/**
 * 构建飞船相关的组件
 * @author dengp
 *
 */
public class DpbAirShipBuild implements AirShipBuild{

	@Override
	public OrbitalModule buildOrbitalModule() {
		System.out.println("东方红牌轨道舱");
		return new OrbitalModule("东方红牌轨道舱");
	}

	@Override
	public Engine buildEngine() {
		System.out.println("东方红牌发动机");
		return new Engine("东方红牌发动机");
	}

	@Override
	public EscapeTower buildeEscapeTower() {
		System.out.println("东方红牌逃生舱");
		return new EscapeTower("东方红牌逃生塔");
	}

}

产品组装

定义产品组装接口及组装的实现

package com.dpb.build;

public interface AirShipDirector {

	// 组装飞船
	AirShip directorAirShip();
}

package com.dpb.build;
/**
 * 组装东方红牌飞船
 * @author dengp
 *
 */
public class DpbAirShipDirector implements AirShipDirector{
	
	private AirShipBuild build;

	public DpbAirShipDirector(AirShipBuild build) {
		super();
		this.build = build;
	}

	@Override
	public AirShip directorAirShip() {
		// 通过构建工具分别构建各组件
		Engine engine = build.buildEngine();
		OrbitalModule orbitalModule = build.buildOrbitalModule();
		EscapeTower escapeTower = build.buildeEscapeTower();
		
		// 组装相关组件
		AirShip ship = new AirShip();
		ship.setEngine(engine);
		ship.setEscapeTower(escapeTower);
		ship.setOrbitalModule(orbitalModule);
		return ship;
	}
}

测试

public class Client {

	public static void main(String[] args) {
		// 1.创建者
		AirShipBuild build = new DpbAirShipBuild();
		// 2.创建构建器
		AirShipDirector director = new DpbAirShipDirector(build);
		AirShip ship = director.directorAirShip();
		ship.launch();
	}
}

开发中应用场景:

  1. StringBuilder类的append方法
  2. SQL中的PreparedStatement
  3. JDOM中,DomBuilder、SAXBuilder

标签:Engine,return,String,建造,模式,build,设计模式,public,name
From: https://www.cnblogs.com/ytmm/p/16773440.html

相关文章

  • 桥接模式——Java实现
    问题描述:用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。类图:  Java源代码://Road.javapackageshiyan9;publicabstractcla......
  • ipad mini2 进入dfu模式
    开机状态,用数据线连接电脑,可以打开i4助手方便后面查看是否进入dfu模式。按住关机键2秒,然后同时按住关机键和Home键8-10秒;最后,只要按住Home键15秒。看到黑屏状态后基本就......
  • Java 多线程(三)静态代理模式
    静态代理模式:1.真实角色和代理角色实现同一个接口2.代理角色要代理真实角色3.代理角色可以做真实角色做不了的事4.真实角色专注做自己的事publicclassStaticProxy......
  • 设备全生命周期管理,开启设管管理新模式
    01数字化转型对设备管理提出新要求过去四十年,中国制造业取得了飞速发展。当前,中国制造业生产总值已名列世界前列。未来数十年我国将实现从工业大国向工业强国的转变,提高生产......
  • RocketMQ5.0 DLedger Controller模式
    RocketMQ5.0已经发布,在RocketMQ5.0新增了一个新的高可用模式DLedgerController模式。下面就来聊一下RocketMQ5.0新增的这个模式。1\.背景首先我们需要知道DLedgerContr......
  • 设计模式 -- Facade(门面模式)
    门面模式(Facade)系统间耦合的复杂度对于客户系统和子系统之前存在很多的耦合的情况,如果不考虑设计的情况,那么会形成A方案的情况,系统的依赖严重,维护性大大降低。如果在......
  • 利用 spring 的 bean 和策略模式优雅的写出可扩展的代码
     代码的的其中有个设计原则就是:开闭原则。 我们在开发过程中经常会遇到这样的问题:就是往往需要有不同的计算方案,比如促销方案,打折。 这个例子就是通过利用 spring ......
  • k8s 网络通信模式
    ## 使用容器化技术有这样一个难题 就是如何实现容器之间通过ip地址进行通信。还有一个难题就是如何实现不同宿主机之间的容器相互通信。  来看看 flannel 解决这个......
  • 设计模式在美团外卖营销业务中的实践
     业务策略多变导致需求多变,是业界很多技术团队面临的最具挑战的问题之一。那么如何设计一套易于扩展和维护的营销系统呢?  今天的文章来自美团外卖营销技术团队,他们分享......
  • 初识设计模式 - 外观模式
    简介外观设计模式(FacadeDesignPattern)又被叫作门面模式,其描述是,通过为多个复杂的子系统提供统一的接口,使得子系统更容易被使用。在现实生活中,常常存在办事复杂的情况,如......