Java设计模式之建造者模式(二)

来源:互联网 发布:艾默生网络能源出售 编辑:程序博客网 时间:2024/05/21 14:06

一、使用场景

1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。

二、通用类图

UML

三、举例

假设有一个手机厂商,为客户生产手机,整个手机由硬件、操作系统和应用程序组成,用户可能需要iPhone手机,或者Android手机。

产品角色Product——Phone:

package com.wz.builder;public class Phone {    private String hardware;    private String OS;    private String app;    public String getHardware() {        return hardware;    }    public void setHardware(String hardware) {        this.hardware = hardware;    }    public String getOS() {        return OS;    }    public void setOS(String oS) {        OS = oS;    }    public String getApp() {        return app;    }    public void setApp(String app) {        this.app = app;    }}

具体产品1——Android手机:

package com.wz.builder;public class AndroidPhone extends Phone{    public AndroidPhone(){        System.out.println("生产 Android手机");    }}

具体产品2——iPhone手机:

package com.wz.builder;public class IPhone extends Phone{    public IPhone(){        System.out.println("生产iPhone手机");    }}

抽象建造者类Builder——PhoneBuilder:

package com.wz.builder;public interface PhoneBuilder {    public void buildHardware();    public void buildOS();    public void buildApp();    public Phone retrievePhone();}

具体建造者类ConcreteBuilder1——AndroidPhoneBuilder:

package com.wz.builder;public class AndroidPhoneBuilder implements PhoneBuilder{    Phone phone;    public AndroidPhoneBuilder() {        phone = new AndroidPhone();    }    @Override    public void buildHardware() {        // TODO Auto-generated method stub        System.out.println("build Android手机的硬件");    }    @Override    public void buildOS() {        // TODO Auto-generated method stub        System.out.println("build Android手机的系统");    }    @Override    public void buildApp() {        // TODO Auto-generated method stub        System.out.println("build Android手机的应用程序");    }    @Override    public Phone retrievePhone() {        // TODO Auto-generated method stub        return phone;    }}

具体建造者类ConcreteBuilder2——IPhoneBuilder:

package com.wz.builder;public class IPhoneBuilder implements PhoneBuilder{    Phone phone;    public IPhoneBuilder(){        phone = new IPhone();    }    @Override    public void buildHardware() {        // TODO Auto-generated method stub        System.out.println("build iPhone手机的硬件");    }    @Override    public void buildOS() {        // TODO Auto-generated method stub        System.out.println("build iPhone手机的硬件");    }    @Override    public void buildApp() {        // TODO Auto-generated method stub        System.out.println("build iPhone手机的硬件");    }    @Override    public Phone retrievePhone() {        // TODO Auto-generated method stub        return phone;    }}

导演者类Director——PhoneDirector:

package com.wz.builder;public class PhoneDirector {    public Phone constructPhone(PhoneBuilder phoneBuilder){        phoneBuilder.buildHardware();        phoneBuilder.buildOS();        phoneBuilder.buildApp();        return phoneBuilder.retrievePhone();    }}

客户端类Client——Client:

package com.wz.builder;public class Client {    public static void main(String[] args) {        PhoneDirector phoneDirector = new PhoneDirector();        phoneDirector.constructPhone(new AndroidPhoneBuilder());        phoneDirector.constructPhone(new IPhoneBuilder());    }}

执行结果:

生产 Android手机build Android手机的硬件build Android手机的系统build Android手机的应用程序生产iPhone手机build iPhone手机的硬件build iPhone手机的硬件build iPhone手机的硬件

参考:

http://haolloyin.blog.51cto.com/1177454/333155/

http://blog.csdn.net/jason0539/article/details/44992733

http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

http://www.cnblogs.com/java-my-life/archive/2012/04/07/2433939.html

1 0
原创粉丝点击