java23种设计模式—建造者模式

26 篇文章 0 订阅
22 篇文章 0 订阅

 


1.  定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象。


简单点描述就是将一个复杂对象的构建拆分成若干步骤,每个构建步骤赋予复杂对象不同的属性,如此以来,通过同样的构建过程可以创建不同的对象。对象的构建过程由指导者director指导。客户端通过指导者创建需要的对象。


2. 该模式包含的角色及其功能:
- 产品:需要被构造的对象
- 建造者:具有一系列构建产品的方法的对象
- 指导者:负责调用建造者,执行建造者一系列的建造方法


3. 使用情景:
 
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
- 当构造过程允许被构造的对象有不同的表示时
4. 示例代码:

 

 

 

 

/**
 * 抽象汽车建造者接口.
 */
public interface ICarBulider {


    void composeEngine(String engine);


    void composeSteelingWheel(String steelingWheel);


    void composeWheel(String wheel);


    Car buildCar();
}

/**
 * 被建造的产品(汽车).
 */
public class Car {
    
    private String Engine;
    /**
     * desc:方向盘
     */
    private String SteelingWheel;
    
    /**
     * desc:轮子
     */
    private String wheel;


    public String getEnging() {
        return Enging;
    }


    public void setEnging(String enging) {
        Enging = enging;
    }


    public String getSteelingWheel() {
        return SteelingWheel;
    }


    public void setSteelingWheel(String steelingWheel) {
        SteelingWheel = steelingWheel;
    }


    public String getWheel() {
        return wheel;
    }


    public void setWheel(String wheel) {
        this.wheel = wheel;
    }


    @Override
    public String toString() {
        return "Car{" +
                "Enging='" + Enging + '\'' +
                ", SteelingWheel='" + SteelingWheel + '\'' +
                ", wheel='" + wheel + '\'' +
                '}';
    }
}

/**
 * 具体的汽车建造者
 */
public class CarBuilder implements ICarBulider {
    
    private Car car = new Car();


    @Override
    public void composeEngine(String engine) {
        car.setEnging(engine);
    }


    @Override
    public void composeSteelingWheel(String steelingWheel) {
        car.setSteelingWheel(steelingWheel);
    }


    @Override
    public void composeWheel(String wheel) {
        car.setWheel(wheel);
    }
    
    @Override
    public Car buildCar() {
        return car;
    }
}

/**
 * 指导者
 */
public class Director {
    private ICarBuilder builder

    public Director(ICarBuilder carBuilder) {
        this.builder = carBuilder;
    } 
    public ICarBuilder buildEngine(String name) {
        builder.composeEngine(name);
        return builder;
    }

    public ICarBuilder buildWheel(String name) {
        builder.composeWheel(name);
        return builder;
    }

    public ICarBuilder buildSteelingWheel(String name) {
        builder.composeSteelingWheel(name);
        return builder;
    }

    public Car build() {
        return this.carbuilder.builderCar();
    }




    public static Car constructCar(ICarBulider carBulider) {
        carBulider.composeEngine("德国制造");
        carBulider.composeWheel("四轮子汽车轮胎");
        carBulider.composeSteelingWheel("单幅");
        return carBulider.buildCar();
    }
}

/**
 * 测试客户端
 */
public class Client {
    public static void main(String[] args) {
        Director direct = new Director(new CarBuilder());
        Car car = direct.buildEngine("德国制造“).buildWheel("四轮汽车轮 
        胎").buildSteelingWheel("单幅").build();
        System.err.println(car.toString());
    }
    
}

 

控制台打印结果:
Car{Enging='德国制造', SteelingWheel='单幅', wheel='四轮子汽车轮胎'}

5. 延伸

 

 

当建造者是系统具体的一个类的时候,指导者可以省略。其结果就是指导者和建造者合二为一。

 

此博客与github个人博客同步,如果想要更好的阅读体验,请访问:https://asituyasi.github.io/

更多设计模式原创文章:

原型模式

单例模式

建造者模式

工厂模式

策略模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值