Java设计模式之建造者模式(Builder Pattern)
2021-01-22 06:13
标签:tair 创建 uil dom ace col class 需要 int 这篇文章主要向大家讲解什么是建造者模式,建造者模式的实例讲解及应用场景等知识点。 ? 用户可以不知道产品的构建细节直接可以创建复杂的对象,主要是分离了产品的构建和装配,这样就实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象; 相同的构建器,不同的装配顺序也可以做出不同的对象,这样就实现了的复用性和。 举例说明: 比如我们组建一个造飞船和装配飞船。 说明: (1)、装配者(Director)直接和客户(Client)进行交流;交流后装配者将客户创建产品的需求划分为几个部分去请求(Builder)去做, (2)、抽象的建造者(Builder)请求委派到具体的建造者(AirBuilder);各个具体建造者负责进行产品部件的构建;最终构建成具体产品(Product)。 其实很类似苹果的代工厂 下面让我们来做一个具体的实例来讲解建造者模式: 飞船实例: 假设飞船(AirShip)由三个零部件组成(引擎,轨道窗,发射塔),那么这些零部件的创建就交给我们的建造者实现,抽象的建造者(AirShipBuilder)交给具体的建造者(ZgAirShipBuilder)来完成这些零部件的生产。 具体的装配者(ZgrAirShipDirector)只需要把建造者生产出来的零部件组装起来,客户端只需要与装配者打交道即可。 具体的实现代码如下: 飞船的组装零件(Engine,EscapeTower,OrbitaModule) 飞船 建造者 (AirShipBuilder,ZgAirShipBuilder) 装配者(AirShipDirector,ZgrAirShipDirector) 客户端(Client)调用 通过以上这个飞船的例子我相信大家已经明白什么是建造者模式了吧!!!!!!!!!! 开发中应用场景: 那么建造者模式有什么优点和缺点呢? 优点: 缺点: 请帮忙点个赞,因为你的鼓励是我创作最大的动力! Java设计模式之建造者模式(Builder Pattern) 标签:tair 创建 uil dom ace col class 需要 int 原文地址:https://www.cnblogs.com/xiaofuzi123456/p/12891968.html前言
一、建造者介绍
苹果公司管产品的设计,设计出来的产品,交给中国大陆的代工厂去组装生产。二、建造者的实例讲解
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;
}
}
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;
}
}
public class OrbitaModule {
private String name;
public OrbitaModule(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* @author 13394
*/
public class AirShip {
private EscapeTower escapeTower;
private Engine engine;
private OrbitaModule orbitaModule;
public AirShip(EscapeTower escapeTower, Engine engine, OrbitaModule orbitaModule) {
this.escapeTower = escapeTower;
this.engine = engine;
this.orbitaModule = orbitaModule;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public OrbitaModule getOrbitaModule() {
return orbitaModule;
}
public void setOrbitaModule(OrbitaModule orbitaModule) {
this.orbitaModule = orbitaModule;
}
}
public interface AirShipBuilder {
Engine getEngine();
EscapeTower getEscapeTower();
OrbitaModule getOrbitaModule();
}
public class ZgAirShipBuilder implements AirShipBuilder {
@Override
public Engine getEngine() {
System.out.println("构造发动机!!!!!!!!!!!!!");
return new Engine("发动机");
}
@Override
public EscapeTower getEscapeTower() {
System.out.println("构造逃逸塔!!!!!!!!");
return new EscapeTower("逃逸塔");
}
@Override
public OrbitaModule getOrbitaModule() {
System.out.println("构造轨道舱!!!!!!!!!!!!");
return new OrbitaModule("轨道舱");
}
}
public interface AirShipDirector {
public AirShip directAirShip();
}
public class ZgrAirShipDirector implements AirShipDirector {
private AirShipBuilder airShipBuilder;
public ZgrAirShipDirector(AirShipBuilder airShipBuilder) {
this.airShipBuilder = airShipBuilder;
}
@Override
public AirShip directAirShip() {
Engine engine = airShipBuilder.getEngine();
EscapeTower escapeTower = airShipBuilder.getEscapeTower();
OrbitaModule orbitaModule = airShipBuilder.getOrbitaModule();
AirShip airShip = new AirShip(escapeTower, engine, orbitaModule);
return airShip;
}
}
public class Client {
public static void main(String[] args) {
AirShipDirector airShipDirector=new ZgrAirShipDirector(new ZgAirShipBuilder());
airShipDirector.directAirShip();
}
}
三、建造者模式的应用场景
StringBuilder类的append方法
SQL中的 PreparedStatement
JDOM中DomBuilder、SAXBuilder四、小结
将产品本身与产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品。也就说细节依赖抽象。
将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰
增加新的具体建造者无需修改原有类库的代码,易于拓展,符合“开闭原则“。
文章标题:Java设计模式之建造者模式(Builder Pattern)
文章链接:http://soscw.com/index.php/essay/45320.html