4.设计模式-建造者模式

前段时间一直忙于考证,没有整理,打开博客感觉又好像过了很久的样子,哎,松懈时间过得真快,今天整理一波建造者模式。
从字面意思建造者模式更倾向于建造。例如计算机包含鼠标,键盘,耳机,音响,打印机等等硬件设备。这是一个相对比较复杂的对象。而我们要创建的是计算机这个整体,如果采用工厂模式就没那么专业。因为工厂模式更多的是提供单个组件的创建。所以这里用建造者模式会比较好一点。

准备一个计算机实体类


/**
 * 计算机对象
 */
public class Computer {
    //鼠标对象,模拟
    private String mouse;
    //键盘对象,模拟
    private String keyBoard;
    //耳机对象,模拟
    private String earphone;

    public String getMouse() {
        return mouse;
    }

    public void setMouse(String mouse) {
        this.mouse = mouse;
    }

    public String getKeyBoard() {
        return keyBoard;
    }

    public void setKeyBoard(String keyBoard) {
        this.keyBoard = keyBoard;
    }

    public String getEarphone() {
        return earphone;
    }

    public void setEarphone(String earphone) {
        this.earphone = earphone;
    }
}

准备一个创建组件的抽象类

/**
 * 创建builder抽象类,封装了各种创建组件的方法
 */
public abstract class ComputerBuilder {
    //维护一个计算机对象,用于返回
    protected Computer computer = new Computer();
    public abstract void buildMouse();
    public abstract void buildKeyBoard();
    public abstract void buildEarphone();
    public Computer getResult(){
        return computer;
    }
}

准备一个具体计算机的创建组件实现类

/**
 * 具体某个品牌电脑的创建实现类,进行自己的组件创建
 */
public class AppleComputerBuilder extends ComputerBuilder {
    @Override
    public void buildMouse() {
        computer.setMouse("mouse");
    }

    @Override
    public void buildKeyBoard() {
        computer.setKeyBoard("keyBoard");
    }

    @Override
    public void buildEarphone() {
        computer.setEarphone("earphone");
    }
}

准备一个建造类,用于返回创建对象

/**
 * 建造指挥者
 */
public class Director {
    private ComputerBuilder computerBuilder;
    //采用多态的形式维护一个builder对象
    public Director(ComputerBuilder computerBuilder){
        this.computerBuilder=computerBuilder;
    }

    /**
     * 提供一个建造的方法,将内部的组件统一进行创建
     * @return
     */
    public Computer constructComputer(){
        computerBuilder.buildEarphone();
        computerBuilder.buildKeyBoard();
        computerBuilder.buildMouse();
        return computerBuilder.getResult();
    }
    //测试
    public static void main(String[] args) {
        Computer computer = new Director(new AppleComputerBuilder()).constructComputer();
        System.out.println(computer.getEarphone()+"..."+computer.getKeyBoard()+"..."+computer.getMouse());
    }
}

到此一个复杂的对象就创建出来了

主要优点
1.横向扩展性好,不同的计算机厂商可以有不同的实现
2.客户端不需要知道里面实现的细节
主要缺点:
产品创建相对比较僵硬,只能是这些组件,如果后续需要增加组件,那么维护起来麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值