大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  • 加入社区3,268天
  • 写了333,609字

该文章投稿至Nemo社区   Java  板块 复制链接


设计模式二 创建者模式

发布于 2017/06/10 18:05 1,169浏览 0回复 2,604

         英文叫Builder Pattern。其核心思想是将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。简而言之,具有同样的创建工序,不同的细节,创建出的同一对象,但是又具有不同的属性的对象;比如不同的人炒一道菜,流程都是一样的,但是由于经验的不同,或者工序顺序不一样,导致细节上的差别,做出来的菜的味道就不一样。

 适用的范围

1. 相同的方法,顺序不同产生的产品不一样。

2. 多个属性,拼装时不同拼装出来的产品也不一样。

3. 产品类复杂,或者产品类中的调用顺序不同产生了不同的效能。

就那最经典的案例制作汽车来说,根据现在的需求多样化,生产单一的汽车不现实,就需要根据不同的需求制作出不同的汽车。

第一步:创建汽车类Car 有三个属性

package com.example.fwms.designmode.build;

/**
 * Created by FWMS on 2017/6/10.
 */

public class Car {
    private String color;//颜色
    private int height;//高度
    private String power;//动力

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int hight) {
        this.height = hight;
    }

    public String getPower() {
        return power;
    }

    public void setPower(String power) {
        this.power = power;
    }
}

第二步 设计接口 将方法抽象出来

package com.example.fwms.designmode.build;

/**
 * 创建 by 刘宇飞 on 2017/6/10.
 * 邮箱:3494576680@qq.com
 * 描述
 */

public abstract class CarBuilder {
    protected Car car=new Car();
    public abstract CarBuilder setColor(String color);
    public abstract CarBuilder setHeight(int height);
    public abstract CarBuilder setPower(String power);
public abstract Car create(); }

第三步 实现接口方法

package com.example.fwms.designmode.build;

/**
 * 创建 by 刘宇飞 on 2017/6/10.
 * 邮箱:3494576680@qq.com
 * 描述
 */

public class SUVCarBuilder extends CarBuilder {
    @Override
    public CarBuilder setColor(String color) {
        car.setColor(color);
        return this;
    }

    @Override
    public CarBuilder setHeight(int height) {
        car.setHeight(height);
        return this;
    }

    @Override
    public CarBuilder setPower(String power) {
        car.setPower(power);
        return this;
    }

    @Override
    public Car create() {
        return car;
    }
}

最后一步 创建对象

    private void createBuil() {
        CarBuilder builder = new SUVCarBuilder();
        Car car = builder.setColor("黑色")
                .setPower("2.0T")
                .setHeight(2)
                .create();
        showToast(getApplicationContext(),car.getColor()+"!"+car.getPower()+"!"+car.getHeight());
    }

到此结束了,有木有感觉有些蛋疼,直接car.setColor() 不就好了吗,还创建了这么多类,闲的蛋疼。

哈哈,我来说明一下为什么还这样做,假如你需要一辆车,指定了各种参数,人家给你做出来了,但是你知道是怎么做的吗,具体流程是什么,你完全不知道,也不用知道。案例build.setColor() 其实里面隐藏了制作过程,这就达到了代码的复用。

在开发中慢慢体会吧。

GitHub地址

本文标签
 {{tag}}
点了个评