【设计模式】建造者模式

建造者模式:在构建一个复杂对象时,将他的构建与表示分离,使得同样的构建过程可以创建不同的表示。

比如:在构建一个Computer对象时,先构建它的显卡,CPU,主板等

Product

public class Computer {
    private String cpu;
    private String motherBoard;
    private String videoCard;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMotherBoard() {
        return motherBoard;
    }

    public void setMotherBoard(String motherBoard) {
        this.motherBoard = motherBoard;
    }

    public String getVideoCard() {
        return videoCard;
    }

    public void setVideoCard(String videoCard) {
        this.videoCard = videoCard;
    }

}
抽象建造者
public interface ComputerBulider {
    void bulidCpu();
    void bulidMotherBoard();
    void bulidVideoCard();
    Computer buildComputer();
}

实体建造者
public class LenovoBulider implements ComputerBulider{
    private Computer computer;
    public LenovoBulider(){
        computer = new Computer();
    }
    public void bulidCpu(){
        computer.setCpu("联想电脑使用的CPU");
    }
    public void bulidMotherBoard(){
        computer.setMotherBoard("联想电脑使用的主板");
    }
    public void bulidVideoCard(){
        computer.setVideoCard("联想电脑使用的显卡");
    }
    public Computer buildComputer() {
        return computer;
    }
}

指导者

public class ComputerDirector {
    public static Computer constructComputer(ComputerBulider bulider){
        bulider.bulidCpu();
        bulider.bulidMotherBoard();
        bulider.bulidVideoCard();
        return bulider.buildComputer();
    }
}

使用实例

public class ComputerDemo {
    public static void main(String[] args) {
        Computer computer = ComputerDirector.constructComputer(new LenovoBulider());

        System.out.println(computer.getCpu());
        System.out.println(computer.getMotherBoard());
        System.out.println(computer.getVideoCard());

    }
}

验证输出:

联想电脑使用的CPU
联想电脑使用的主板
联想电脑使用的显卡

建造者模式中的产品扩展:加入我们现在需要一个苹果电脑,那我们只需要构建一个苹果的建造者,如下

MAC电脑的建造者

public class MacBulider implements ComputerBulider {
    private Computer computer;

    public MacBulider(){
        computer = new Computer();
    }
    public void bulidCpu() {
        computer.setCpu("Mac使用的CPU");
    }

    public void bulidMotherBoard() {
        computer.setMotherBoard("MAC使用的主板");
    }

    public void bulidVideoCard() {
        computer.setVideoCard("MAC使用的显卡");
    }

    public Computer buildComputer() {
        return computer;
    }
}

使用实例:

public class ComputerDemo {
    public static void main(String[] args) {
        Computer lenovoComputer = ComputerDirector.constructComputer(new LenovoBulider());
        System.out.println(lenovoComputer.getCpu());
        System.out.println(lenovoComputer.getMotherBoard());
        System.out.println(lenovoComputer.getVideoCard());

        Computer macComputer = ComputerDirector.constructComputer(new MacBulider());
        System.out.println(macComputer.getCpu());
        System.out.println(macComputer.getMotherBoard());
        System.out.println(macComputer.getVideoCard());
    }
}

验证输出:

联想电脑使用的CPU
联想电脑使用的主板
联想电脑使用的显卡
Mac使用的CPU
MAC使用的主板
MAC使用的显卡


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值