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

来源:互联网 发布:淘宝关注的主播在哪里 编辑:程序博客网 时间:2024/06/05 17:08

一:建造者模式

将复杂对象的创建与表示分离,同样的创建过程可创造不同的表示

二:设计原则

(1)分步骤创建复杂对象
(2)构建与表示分离
(3)单一职责

三:建造者模式和抽象工厂模式的区别

(1)建造者分步骤构建一个复杂对象;抽象工厂构建对象族
(2)建造者模式在最后一步返回具体产品;抽象工厂则立即返回具体产品
四:使用场合
(1)对象复杂结构

(2)复杂对象需要与表示分离,创建不同的表示




要创建一个复杂对象如手机套餐,套餐中有3个复杂业务,短信、彩信、话费

package SheJiMoShiNaDianShi.Builder.model;     /**  * Created by hjw on 16/8/29.  * 创建产品-手机套餐  */  public class MobilePackage {      //话费      private  float money;      //短信      private int shortInfo;      //彩信      private String music;         public float getMoney() {          return money;      }         public void setMoney(float money) {          this.money = money;      }         public int getShortInfo() {          return shortInfo;      }         public void setShortInfo(int shortInfo) {          this.shortInfo = shortInfo;      }         public String getMusic() {          return music;      }         public void setMusic(String music) {          this.music = music;      }  }  




package SheJiMoShiNaDianShi.Builder.itf; import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. * 抽象构建者接口 */public interface IMobileBuilder {     //构建手机套餐的话费    public void buildMoney();     //构建手机套餐的短信    public void buildShortInfo();     //构建手机套餐的彩信    public void buildMusic();     //返回构建的手机套餐对象    public MobilePackage getMobilePackage(); }      ===============================================  package SheJiMoShiNaDianShi.Builder.base; import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. * 抽象构造者 */public abstract class AbstractBasePackage {    protected MobilePackage mobilePackage;     public  AbstractBasePackage() {         this.mobilePackage = new MobilePackage();    }}    ================================================  package SheJiMoShiNaDianShi.Builder.itf; import SheJiMoShiNaDianShi.Builder.base.AbstractBasePackage;import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. * 20圆400条短信 */public class MobileBuilderImpl1 extends AbstractBasePackage implements  IMobileBuilder {    @Override    public void buildMoney() {      this.mobilePackage.setMoney(20.0f);    }     @Override    public void buildShortInfo() {      this.mobilePackage.setShortInfo(400);    }     @Override    public void buildMusic() {        this.mobilePackage.setMusic("天使");     }     @Override    public MobilePackage getMobilePackage() {        return this.mobilePackage;    }}  ================================================package SheJiMoShiNaDianShi.Builder.itf; import SheJiMoShiNaDianShi.Builder.base.AbstractBasePackage;import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. * 40圆200条短信 */public class MobileBuilderImpl2 extends AbstractBasePackage implements  IMobileBuilder {    @Override    public void buildMoney() {      this.mobilePackage.setMoney(40.0f);    }     @Override    public void buildShortInfo() {      this.mobilePackage.setShortInfo(200);    }     @Override    public void buildMusic() {        this.mobilePackage.setMusic("大海");     }     @Override    public MobilePackage getMobilePackage() {        return this.mobilePackage;    }}================================================  package SheJiMoShiNaDianShi.Builder.model; /** * Created by hjw on 16/8/29. * 创建产品-手机套餐 */public class MobilePackage {    //话费    private  float money;    //短信    private int shortInfo;    //彩信    private String music;     public float getMoney() {        return money;    }     public void setMoney(float money) {        this.money = money;    }     public int getShortInfo() {        return shortInfo;    }     public void setShortInfo(int shortInfo) {        this.shortInfo = shortInfo;    }     public String getMusic() {        return music;    }     public void setMusic(String music) {        this.music = music;    }}================================================ package SheJiMoShiNaDianShi.Builder.director; import SheJiMoShiNaDianShi.Builder.itf.IMobileBuilder;import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. */public class MobileDirector {    public MobilePackage creatMobilePackage(IMobileBuilder mobileBuilder){        if(mobileBuilder != null){            mobileBuilder.buildMoney();            mobileBuilder.buildShortInfo();            mobileBuilder.buildMusic();            return mobileBuilder.getMobilePackage();        }else            return null;    }} ================================================package SheJiMoShiNaDianShi.Builder; import SheJiMoShiNaDianShi.Builder.director.MobileDirector;import SheJiMoShiNaDianShi.Builder.itf.MobileBuilderImpl1;import SheJiMoShiNaDianShi.Builder.itf.MobileBuilderImpl2;import SheJiMoShiNaDianShi.Builder.model.MobilePackage; /** * Created by hjw on 16/8/30. */public class MainApp {    public static void main(String[] args) {        MobileDirector mobileDirector = new MobileDirector();        //  套餐1        MobileBuilderImpl1 mobileBuilderImpl1 = new MobileBuilderImpl1();        MobileBuilderImpl2 mobileBuilderImpl2 = new MobileBuilderImpl2();         printMessage(mobileDirector.creatMobilePackage(mobileBuilderImpl1));        printMessage(mobileDirector.creatMobilePackage(mobileBuilderImpl2));        System.out.println(mobileBuilderImpl1.getMobilePackage().getMoney());    }     public  static  void printMessage(MobilePackage mobilePackage){        System.out.println("--话费:"+mobilePackage.getMoney() + "\t+短信:"+mobilePackage.getShortInfo()        +"\t彩信:"+mobilePackage.getMusic());    } }


0 0
原创粉丝点击