java设计模式 - 建造者模式

建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

建造者模式概括✌️:

1.需要有一个抽象的建造者,统一建造的实体的方法,比如有构建主机,显示器,键盘鼠标方法,有一个建造完毕返回这个物品的方法。构建的具体类 继承抽象构建者,使用该具体的建造者来进行构建。

2.被建造的实体类,开放被构建部分的方法 即开放set方法,也可以另外新增方法。(比如:电脑实体类)

3.指挥者类,指挥者类负责指挥构建类来对某个被建造的实体进行构建,其中指挥者类必须明确知道自己指挥的是哪个构建者 (即 内部有一个构建者的对象属性) 还有任意个构建方法,构建方法中有关于是如何构建的可以灵活的选择,即屏蔽了被构建者的内部细节。

1.指定建造者的抽象类 并创建一个建造者类

package BuilderPattern;

/**
 * @Author Tang
 **/
// 抽象的构建者
public abstract class AbstractBuilder {
   // 创建一个电脑对象
    Computer computer = new Computer();

    // 构建主机
    public abstract void buildMainFrame();

    // 构建显示器
    public abstract void buildDisplay();

    // 构建键盘鼠标
    public abstract void buildKeyboard();

    //返回电脑对象
    public Computer returnComputer(){
        return computer;
    }

}

// 具体的建造者
class Builder extends  AbstractBuilder{

 @Override
 public void buildMainFrame() {
  computer.setMainFrame("建造主机完毕....");
 }

 @Override
 public void buildDisplay() {
  computer.setDisplay("建造显示器完毕...");
 }

 @Override
 public void buildKeyboard() {
computer.setKeyboard("建造键盘鼠标完毕....");
 }
}

2.创建一个具体的被创建者类 (电脑)

package BuilderPattern;

/**
 * @Author Tang
 **/

// 具体的被创建类 电脑类
public class Computer {
    private String mainFrame;
    private String display;
    private String keyboard;

    public void setMainFrame(String mainFrame) {
        this.mainFrame = mainFrame;
    }

    public void setDisplay(String display) {
        this.display = display;
    }

    public void setKeyboard(String keyboard) {
        this.keyboard = keyboard;
    }
    public void showMessage(Computer computer){
        System.out.println(computer);
        System.out.println("这是一台电脑.");
    }

    @Override
    public String toString() {
        return "Computer{" +
                "mainFrame='" + mainFrame + '\'' +
                ", display='" + display + '\'' +
                ", keyboard='" + keyboard + '\'' +
                '}';
    }
}

3.创建一个指挥者类

package BuilderPattern;

/**
 * @Author Tang
 **/
public class Leader {

    private Builder builder;

    public Leader(Builder builder){
     this.builder = builder;
    }

    // 构建方案一 可以灵活组件
    public Computer build(){
        builder.buildMainFrame();
        builder.buildDisplay();
        builder.buildKeyboard();
        return builder.returnComputer();
    }

    // 构建方案二
    public Computer build2(){
        builder.buildDisplay();;
        builder.buildKeyboard();
        return builder.returnComputer();
    }

}

// 使用者 我们无需知道构建的内部细节,只需要知道我们构建的对象是什么
class  BuilderMain{
    public static void main(String[] args) {
        Builder builder = new Builder();
        Leader leader = new Leader(builder);
        Computer computer = leader.build();
        computer.showMessage(computer);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值