设计模式-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
- 设计模式3(建造者模式)
- 设计模式(3) - Builder建造者模式
- C#设计模式(3)建造者模式
- 设计模式(3)------建造者模式
- 设计模式-3-建造者模式
- 设计模式(3)--建造者模式
- 设计模式-------建造者
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- 设计模式-建造者
- 建造者设计模式
- 建造者设计模式
- 建造者设计模式
- [设计]建造者模式
- 设计模式:建造者模式
- 设计模式---建造者模式
- list容器的遍历删除
- 继承(Inheritance)与复合(Composition)关系下的构造与析构
- 2017,回来了~
- Shell 练习题 21—30,内附答案
- 关于如何单独失能STM32 TIM通道的方法
- 设计模式-3-建造者模式
- Bagging – building an ensemble of classifers from bootstrap samples
- C++之拷贝构造与拷贝赋值
- AJAX
- 常用操作
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- c++第五作业—三角形类
- 【LeetCode】【Python】【C++】7. Reverse Integer代码实现
- 通过反射取类的属性