【设计模式与Android】建造者模式——建军大业

什么是建造者模式

所谓建造者模式,就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的设计模式。建造者模式在构建过程中隐藏了复杂的实现细节,可以大大降低代码耦合度。

建造者模式的实现方式

 

《水浒传》讲述了的故事,梁山泊是一个不断壮大的队伍

先写一个Troops:


public abstract class Troops {

protected String leader;
    protected ArrayList<String> others = new ArrayList<>();
    protected String purpose;

//领袖
    public void setLeader(String leader) {
        this.leader = leader;
    }

//其他人
    public void setOthers(String... others) {
        for (String other:others){
            this.others.add(other);
        }
    }

//宗旨
    public abstract void setPurpose();

@Override
    public String toString() {
        return "Troops{" +
                "leader=‘" + leader + \‘+
                ", others=" + others.toString() +
                ", purpose=‘" + purpose + \‘+
                ‘}‘;
    }
}

这是梁山的Troops:


public class Liangshan extends Troops {

protected Liangshan(){}

@Override
    public void setPurpose() {
        purpose = "替天行道";
    }
}

再写一个Builder:


public abstract class Builder {

public abstract void buildLeader(String leader);

public abstract void buildOthers(String... others);

public abstract void buildPurpose();

public abstract Troops create();

}

这是好汉们的Builder:


public class LiangshanBuilder extends Builder {

private Liangshan liangshan;

@Override
    public void buildLeader(String leader) {
        liangshan.setLeader(leader);
    }

@Override
    public void buildOthers(String... others) {
        liangshan.setOthers(others);
    }

@Override
    public void buildPurpose() {
        liangshan.setPurpose();
    }

@Override
    public Troops create() {
        return liangshan;
    }
}

接下来写一个Director:


public class Director {

Builder mBuilder = null;

public Director(Builder builder){
        this.mBuilder = builder;
    }

public void construct(String leader,String... others){
        mBuilder.buildLeader(leader);
        mBuilder.buildOthers(others);
        mBuilder.buildPurpose();
    }

}

我们只需要如下代码便可以实现梁山好汉的大聚义:


Builder builder = new LiangshanBuilder();
Director director = new Director(builder);
director.construct("宋江","卢俊义","吴用","公孙胜");
Log.e("梁山",builder.create().toString());

在实际开发过程中,Director层常常被省略,由一个链式调用的Builder来进行对象的组装。我们这次用梁山好汉的对立面——方腊来举例,这次这么改写上文的Builder:


public class MingjiaoBuilder{
    private Mingjiao mingjiao;

public MingjiaoBuilder(){
        mingjiao = new Mingjiao();
    }

public MingjiaoBuilder buildLeader(String leader) {
        mingjiao.setLeader(leader);
        return this;
    }

public MingjiaoBuilder buildOthers(String... others) {
        mingjiao.setOthers(others);
        return this;
    }

public MingjiaoBuilder buildPurpose() {
        mingjiao.setPurpose();
        return this;
    }

public Mingjiao create() {
        return mingjiao;
    }
}

当然,Troops是这样继承的:


public class Mingjiao extends Troops {
    @Override
    public void setPurpose() {
        this.purpose = "作乱犯上";
    }
}

然后方腊作乱犯上的过程是这样的:


MingjiaoBuilder builder = new MingjiaoBuilder()
        //虽是妄称天子位
        .buildLeader("方腊")
        //也须伪列宰臣班
        .buildOthers("石宝","邓元觉","方杰")
        .buildPurpose();
Log.e("明教",builder.create().toString());

Android源码中的建造者模式

(1)AlertDialog.Builder

AlertDialog.Builder是Android源码中最常见的建造者模式,调用方式不再赘述。不过请注意这个建造者模式中并没有Director层的出现,因此这是一种简化的建造者模式。

Android开发中如何利用建造者模式

(1)建造者模式具备封装性良好的优点。在一个对象的初始化特别复杂、并且很多参数都有默认值时的优势非常明显。

(2)建造者模式还具备Builder独立、易于扩展的优点。可以在几个setter方法执行顺序不同时产生不同的结果。

需要注意的几个问题

(1)建造者模式会产生多余的Builder对象和Director对象,是典型的用运行效率换开发进度的设计模式

原文地址:http://dongfeng9ge.blog.51cto.com/9191243/1972481

时间: 2024-10-01 02:58:14

【设计模式与Android】建造者模式——建军大业的相关文章

设计模式学习04—建造者模式

一.动机与定义 创建对象时,我们知道可以使用工厂方式来创建,使调用者和具体实现解耦,但是有一种情况,当要创建的多个对象之间重复性较大,只有创建步骤.组装顺序或者内部构件不同时,工厂模式就需要进一步的演化了,如我们去KFC,有很多种套餐,比如套餐1(薯条+可乐+汉堡),套餐2(鸡肉卷+薯条+可乐),这个套餐就是我们要获取的复杂对象,那么程序如何创建出这种对象呢. 我们看到套餐的内容很多是一样的,那么我们是不是可以考虑将创建单个食品(如鸡肉卷.可乐等)方法提取出来,使用单独一个类协调这些食品的组合比

Android设计模式--建造者模式

回头看自己写的东西,在关于Android自定义控件时,写的代码适用性比较高,但是看上去没有什么技术含量,所以在学习设计模式的时候,想想有些东西是否能够改进,比如说: 自定义Dialog是Android应用必须的,系统的控件实在是太难看了: 在构建中,完全是,new完对象之后,需要什么构建什么,这样写没有问题,可读性也还行,就是看上去不咋的. 以下是小部分代码片段: package com.example.demo.Builder; /** * * @author qubian * @data 2

设计模式学习笔记-建造者模式

一.概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示: 二.模式中的角色 Builder:为创建一个Product对象的各个部件指定抽象接口: ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件:定义并明确它所创建的表示:提供一个检索产品的接口: Director:构造一个使用Builder接口的对象: Product:表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程:包含定义组成部件的类,

设计模式--17、建造者模式

[转]建造者模式 一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年.并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的.实际上这是一个比较经典的建造者模式的例子了. 1.初识建造者模式 建造者模式实际上是常用的设计模式.顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房.楼房是千差万别的,楼房的外形.层数.内部房间的数量.房间的装饰等等都不一样,

设计模式之禅——建造者模式

建造者模式定义: 建造者模式也叫做生成器模式--将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.) 例子:我们要生产一个简单车模(汽车模型),汽车模型要有启动.停止.引擎发出声音.喇叭响等功能.现在我要让用户根据自己的喜好来选择这些功能的顺序~(接着上一篇模板方法模式的例子) 我们做出了下面的设计,见UML图 见代码 //汽车模型的抽象类 public abstract class CarModel{ //sequence就是客户要求执行的方法的顺序 private A

Java设计模式百例 - 建造者模式

本文源码见:https://github.com/get-set/get-designpatterns/tree/master/builder 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式.建造模式可以将一个复杂对象的内部组成部分,与该对象本身的创建分离开来,从而使得复杂对象的组装更灵活. 文绉绉的话不宜多说,其实这种模式还是挺常见的: * 比如我们在订手机套餐的时候,无论是自选还是电信公司配置好的,通常一个套餐包括

我的设计模式:从模版设计模式谈到建造者模式

1.模版设计模式  TemplateMethod Pattern 问题:创建模型,如何处理更好?有共性有异性,共性放在哪里(abstract)?异性放在哪里(实现)? 缺陷:暴露方法好吗?protected保护起来    方法不会被子类继承修改final更好 概念:模版中的方法(抽象方法.具体方法.钩子方法) 模版模式:重写父类的方法,再调用父类的方法产生不同的结果 具体方法一般体现在调用其他方法的顺序上 模版模式一定是继承来的 2.建造者模式  Builder Pattern 问题升级:继续添

《设计模式》之建造者模式(Builder)

仅供自己参考,因初次,有很多东西都只是我自己的理解,如想学习请找下一家. 1.简介 是一种对象构建的设计模式,他可以将复杂的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象. 优点:建造代码与表示代码分离,有偶遇建造者隐藏了该产品是如何组装的. 2.自己的理解 理解不了. 3.盗来的解释 建造者模式实际上是常用的设计模式.顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房.楼房是千差万别的,楼房的外形.层数.内部房间的数量.房间的装饰等等都不一样,但

java常用设计模式四:建造者模式

1.定义 是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量.产品类可以是一个具体的类,也可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成. 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现.这样更容易扩展.一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品.