Android 进阶之路:常见设计模式之建造模式

想成为高级Android工程师其中熟悉常见的设计模式是必不可少的,这个也是我面试一线互联网公司的深刻体会,首先我们现在介绍最基础也是最常用的设计模式:建造(Builder)模式
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
 - 抽象建造者角色:提供一个接口,规范产品对象的建造,一般由子类实现。一般来说,产品的组成部分数与建造方法数相同,即有多少组成部分,就有多少个建造方法。
 - 具体建造者角色:该角色实现了抽象建造者抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。
 - 导演者角色:负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。
 - 产品角色:该角色是建造的复杂对象,提供基本方法。
使用场景:
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。
应用实例:
1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的”套餐”。
2、JAVA 中的 StringBuilder。
一、实例生成汽车 产品

//产品角色
public class Production {
    private String part1;
    private String part2;
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

二、建造者

//抽象建造者角色
public interface IBuilder {
    // 产品有多少个组件,就有多少个建造方法
    public void buildPart1();
    public void buildPart2();
    // 返回产品类 
    public Production build();
}
//建造者实现(注意建造者不一样时(即不同组合),产品是不一样的)
public class BuilderA implements IBuilder {
    private Production production = new Production();

    @Override
    public void buildPart1() {
        System.out.println("构造兰博基尼的第一部分。");
        production.setPart1("This is part1 of Lamborghini");
    }

    @Override
    public void buildPart2() {
        System.out.println("构造兰博基尼的第二部分。");
        production.setPart2("This is part2 of Lamborghini");
    }

    @Override
    public Production build() {
        System.out.println("咔擦!兰博基尼已造好!");
        return production;
    }
}

三、导演者

public class Director {
    private IBuilder builder;
    public Director(IBuilder builder){
        this.builder = builder;
    }

    /**
     * 构造顺序
     */
    public Production construct(){
        builder.buildPart1();
        builder.buildPart2();

        return builder.build();
    }

}

四、测试模块

public class Client {
    public static void main(String[] args){
        // 兰博基尼
        IBuilder builderA = new BuilderA();
        Director directorA = new Director(builderA);
        directorA.construct();
    }
}

五、总结
优点
1)降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。
2)优秀的扩展性。具体建造者相互独立,方便扩展,符合开闭原则。
缺点
1)一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。
资料引用 https://segmentfault.com/a/1190000011513517

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值