23种设计模式之建造者模式

2018-12-27  本文已影响0人  阿跳爱学习

优点:不必知道内部实现,解耦合,可扩展性高。
缺点:如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

使用场景:对某个对象构造复杂的情况下使用。

主要分两部分:
1.构建者(Bulider)
2.组装者(Director)

建造者,主要是构建者和组装者的分工解耦,比如我要建造一台iphone手机,手机有很多的零部件,比如主板、摄像头、电池、外壳等等各种小零件,这些东西构建者(Bulider)负责把它们做出来,而组装者(Director)则负责把它们组装起来,形成一台手机。

准备工作

创建手机各个部件的实体类,例子从简,分外壳和主板。

外壳类(Shell):

/**
 * 这是一个手机外壳类
 */

public class Shell {
    private String name;

    public Shell(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

主板类(Motherboard):

/**
 * 这是一个手机主板类
 */

public class Motherboard {
    private String name;

    public Motherboard(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

手机类(Phone):

/**
 * 这是一个手机类
 */

public class Phone {

    private Motherboard motherboard;
    private Shell shell;

    public Motherboard getMotherboard() {
        return motherboard;
    }

    public void setMotherboard(Motherboard motherboard) {
        this.motherboard = motherboard;
    }

    public Shell getShell() {
        return shell;
    }

    public void setShell(Shell shell) {
        this.shell = shell;
    }
}

步入主题

构建者

创建一个构建者接口(PhoneBulider),主要工作用于实现构建主板和构建外壳:

/**
 * 这是一个构建者接口
 */

public interface PhoneBulider {
    Motherboard buliderMotherboard();

    Shell buliderShell();
}

创建一个构建者实现类(IphoneBulider):

/**
 * 这是苹果手机构建实现类
 */

public class IphoneBulider implements PhoneBulider{

    @Override
    public Motherboard buliderMotherboard() {
        Log.d("TAG","构建苹果手机主板");
        return new Motherboard("苹果手机主板");
    }

    @Override
    public Shell buliderShell() {
        Log.d("TAG","构建苹果手机外壳");
        return new Shell("苹果手机外壳");
    }
}

然后步入组装。

组装者

先创建一个组装者接口(PhoneDirector):

/**
 *这是一个组装者接口
 */

public interface PhoneDirector {
    Phone directorPhone();
}

再创建一个组装者实现类:

/**
 * 这是一个苹果手机组装实现类
 */

public class IphoneDirector implements PhoneDirector {

    private PhoneBulider phoneBulider;

    public IphoneDirector(PhoneBulider phoneBulider){
        this.phoneBulider = phoneBulider;
    }


    @Override
    public Phone directorPhone() {
        //让构建者构建好主板与外壳
        Motherboard motherboard = phoneBulider.buliderMotherboard();
        Shell shell = phoneBulider.buliderShell();

        //构建好之后进行组装
        Phone phone = new Phone();
        phone.setMotherboard(motherboard);
        phone.setShell(shell);

        return phone;
    }
}

构建者和组装者都写完了,最后调用试试。

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        PhoneDirector phoneDirector = new IphoneDirector(new IphoneBulider());
        Phone phone = phoneDirector.directorPhone();
        Log.d("TAG", "组装好的Phone = " + phone + "\nMotherboard = " + phone.getMotherboard().getName() + "\nshell = " + phone.getShell().getName());
    }
}
image.png

已完成测试!有不对的地方欢迎指出,感恩。

上一篇 下一篇

猜你喜欢

热点阅读