【设计模式】建造者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liubofucius/article/details/80348520

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

比如:在构建一个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使用的显卡


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页