现在网站一般都是什么语言做的,视频类网站怎么做,微信会员卡管理系统怎么开通,wordpress 摘要 图片一.场景
我们要建造一个复杂的产品,比如手机、电脑、汽车。这个复杂的产品的创建。有这样一个问题需要处理#xff1a; 装配这些子组件是不是有个步骤问题#xff1f; 实际开发中#xff0c;我们所需要的对象构建时#xff0c;也非常复杂#xff0c;有很多步骤需要处理时…一.场景
我们要建造一个复杂的产品,比如手机、电脑、汽车。这个复杂的产品的创建。有这样一个问题需要处理 装配这些子组件是不是有个步骤问题 实际开发中我们所需要的对象构建时也非常复杂有很多步骤需要处理时。
二.本质
分离了对象子组件的单独构造(Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于某个对象的构建过程复杂的情况下使用。由于实现了构建和装配的解耦。不同的构建器相同的装配也可以做出不同的对象相同的构建器不同的装配顺序也可以做出不同的对象。也就实现了构建算法、装配算法的解耦实现了更换的复用。
三.举例实现
造一个XX牌飞船这个飞船有轨道舱、逃逸塔、引擎。那我们应该先造出这些配件有了这些配件后再通过组装造出飞船。 代码实现 飞船和配件类
package hs.builder;
/**
* 对象 XX牌飞船
*/
public class AirShip {private OrbitalModule orbitalModule;//轨道舱private EscpeTower escpeTower;//逃逸塔private Engine engine; //引擎 /*** 可以构建自己的方法*/public void lunch(){System.out.println(发射。。。。。。。);}public OrbitalModule getOrbitalModule() {return orbitalModule;}public EscpeTower getEscpeTower() {return escpeTower;}public Engine getEngine() {return engine;}public void setOrbitalModule(OrbitalModule orbitalModule) {this.orbitalModule orbitalModule;}public void setEscpeTower(EscpeTower escpeTower) {this.escpeTower escpeTower;}public void setEngine(Engine engine) {this.engine engine;}
}/**
* 飞船的轨道舱 对象
*/
public class OrbitalModule{private String name;public OrbitalModule() {}public OrbitalModule(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;}
}/**
* 飞船的逃逸塔 对象
*/
public class EscpeTower{private String name;public EscpeTower() {}public EscpeTower(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;}
}/**
* 飞船的引擎 对象
*/
public class Engine{private String name;public Engine() {}public Engine(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;}
}构建飞船组件接口与实现类
/*** 构建 飞船的组件 接口*/
public interface AirShipBuilder {OrbitalModule builderOrbitalModule(); EscpeTower builderEscpeTower();Engine builderEngine();
}
/*** 构建 飞船的组件 对象*/
public class HisAirShipBuilder implements AirShipBuilder {Overridepublic OrbitalModule builderOrbitalModule() {System.out.println(构建神州牌轨道舱。。。。);return new OrbitalModule(神州牌轨道舱);}Overridepublic EscpeTower builderEscpeTower() {System.out.println(构建神州牌逃逸塔。。。。);return new EscpeTower(神州牌逃逸塔);}Overridepublic Engine builderEngine() {System.out.println(构建神州牌引擎。。。。);return new Engine(神州牌引擎);}
}组装飞船对象接口和实现类
/**
* 组装 飞船对象 接口
*/
public interface AirShipDirector {AirShip directorAirShip();
}
/**
* 组装 飞船对象
*/
public class HisAirShipDirector implements AirShipDirector{private AirShipBuilder builder;public HisAirShipDirector(AirShipBuilder builder) {this.builderbuilder;}Overridepublic AirShip directorAirShip() {OrbitalModule obuilder.builderOrbitalModule();EscpeTower ebuilder.builderEscpeTower();Engine enbuilder.builderEngine();//装配成飞船对象AirShip shipnew AirShip();ship.setOrbitalModule(o);ship.setEscpeTower(e);ship.setEngine(en);return ship;}
}使用者调用
/**
* 建造者模式
*/
public static void main(String[] args) {AirShipDirector director new HisAirShipDirector(new HisAirShipBuilder());AirShip ship director.directorAirShip();//可以调用AirShip里构建的方法(AirShip里可以构建各种指令方法)ship.lunch();System.out.println(ship.getOrbitalModule().getName());
}更多设计模式学习 设计模式(1)介绍 设计模式(2)单例模式 设计模式(3)工厂模式 设计模式(5)原型模式 设计模式(6)桥接模式 设计模式(7)装饰器模式 设计模式持续更新中…