设计模式之创建模式

模式定义:
        创建复杂产品交给具体的工厂,指导者角色总的入口。
遵循原则:
        分步骤创建复杂的对象;
        构建和表示相分离;
        单一职责原则。
适用场合:
        (1)当产品内部具有比较复杂的内部结构的时候;
        (2)当复杂产品需要与表现相分离,可能需要不同的表现时;
        (3)当需要向客户隐藏内部表示时。
知识扩展:
        JDK中的StringBuilder和StringBuffer就用到建造者模式。

        内部有一个数组,所有的append、insert都是对这个数组进行操作,最终返回一个字符串(产品)。


public class AbstractBasePackage {
    protected MobilePackage mp;
    public AbstractBasePackage(){
        this.mp = new MobilePackage();
    }
}

/**
 * 手机套餐,三个独立不相干的模块
 * @author 熊诗言
 *
 */
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;
    }
}

创建者接口,提供一个总的方法提供对象

public interface IMobileBuilder {

    public void buildMoney();
    public void buildShortInfo();
    public void buildMuisc();
    public MobilePackage getMobilePackage();
}

具体建造者1

public class MobileBuilderImp1 extends AbstractBasePackage implements IMobileBuilder {

    @Override
    public void buildMoney() {
        this.mp.setMoney(20);
    }

    @Override
    public void buildMuisc() {
        this.mp.setShortInfo(400);
    }

    @Override
    public void buildShortInfo() {
        this.mp.setMusic("天使");
    }

    @Override
    public MobilePackage getMobilePackage() {
        return this.mp;
    }

}

具体建造者2

public class MobileBuilderImp2 extends AbstractBasePackage implements IMobileBuilder {

    @Override
    public void buildMoney() {
        this.mp.setMoney(30);
    }

    @Override
    public void buildMuisc() {
        this.mp.setShortInfo(600);
    }

    @Override
    public void buildShortInfo() {
        this.mp.setMusic("大海");
    }

    @Override
    public MobilePackage getMobilePackage() {
        return this.mp;
    }

}
总导演
public class MobileDirector {
    public MobilePackage buildPackage(IMobileBuilder mb){
        if(mb!=null){
            mb.buildMoney();
            mb.buildMuisc();
            mb.buildShortInfo();
            return mb.getMobilePackage();
        }
        return null;
    }
    
}

测试

public class MainApp {
    public static void main(String[] args) {
        MobileDirector md = new MobileDirector();
        MobileBuilderImp1 mb1 = new MobileBuilderImp1();
        MobileBuilderImp2 mb2 = new MobileBuilderImp2();
        printMessage(md.buildPackage(mb1));
        printMessage(md.buildPackage(mb2));
        
    }
    public static void printMessage(MobilePackage mp){
        System.out.println("话费:"+mp.getMoney()+" 短信:"+mp.getShortInfo()+" 彩信:"+mp.getMusic());
    }

}


你可能感兴趣的:(设计模式之创建模式)