建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程.
当生成的产品对象内部具有复杂的结构.
当复杂对象需要与表示分离,可能需要创建不同的表示时.
当需要向客户隐藏产品内部结构表现时.
package com.demo.builder.model;
/**
* 产品实体
*/
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 com.demo.builder.base;
import com.demo.builder.model.MobilePackage;
/**
* 建造者抽象类
*/
public abstract class AbstractBasePackage {
protected MobilePackage mobilePackage;
public AbstractBasePackage() {
this.mobilePackage = new MobilePackage();
}
}
package com.demo.builder.itf;
import com.demo.builder.model.MobilePackage;
/**
* 抽象建造者行为
*/
public interface IMobileBuilder {
void buildMoney();
void buildShortInfo();
void buildMusic();
MobilePackage getMobilePackage();
}
package com.demo.builder.itf;
import com.demo.builder.base.AbstractBasePackage;
import com.demo.builder.model.MobilePackage;
/**
* 建造者实体1
*/
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("歌曲1");
}
@Override
public MobilePackage getMobilePackage() {
return this.mobilePackage;
}
}
package com.demo.builder.itf;
import com.demo.builder.base.AbstractBasePackage;
import com.demo.builder.model.MobilePackage;
/**
* 建造者类2
*/
public class MobileBuilderImpl2 extends AbstractBasePackage implements IMobileBuilder{
@Override
public void buildMoney() {
this.mobilePackage.setMoney(30.0f);
}
@Override
public void buildShortInfo() {
this.mobilePackage.setShortInfo(600);
}
@Override
public void buildMusic() {
this.mobilePackage.setMusic("歌曲2");
}
@Override
public MobilePackage getMobilePackage() {
return this.mobilePackage;
}
}
package com.demo.builder.director;
import com.demo.builder.itf.IMobileBuilder;
import com.demo.builder.model.MobilePackage;
/**
* 建造指导者
*/
public class MobileDirector {
public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder) {
if (mobileBuilder != null) {
mobileBuilder.buildMoney();
mobileBuilder.buildMusic();
mobileBuilder.buildShortInfo();
return mobileBuilder.getMobilePackage();
}
return null;
}
}
package main;
import com.demo.builder.director.MobileDirector;
import com.demo.builder.itf.MobileBuilderImpl1;
import com.demo.builder.itf.MobileBuilderImpl2;
import com.demo.builder.model.MobilePackage;
/**
* Created by Administrator on 2016/8/8.
*/
public class MainApp {
public static void main(String[] args) {
MobileDirector mobileDirector = new MobileDirector();
MobileBuilderImpl1 mobileBuilderImpl1 = new MobileBuilderImpl1();
MobileBuilderImpl2 mobileBuilderImpl2 = new MobileBuilderImpl2();
printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl1));
printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl2));
}
public static void printMessage(MobilePackage mobilePackage) {
System.out.println("--话费: " + mobilePackage.getMoney() + "\t短信: " + mobilePackage.getShortInfo() + "\t彩铃: " + mobilePackage.getMusic());
}
}