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

来源:互联网 发布:广域网优化功能 编辑:程序博客网 时间:2024/05/01 05:56

想成为高级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

阅读全文
0 0