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

一:建造者模式

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

二:设计原则

(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());
    }
 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值