java设计模式3--建造者模式
2018-02-25 17:12
344 查看
需求: 现有某种产品P,它有很多子系列产品P1,P2,P3.....,每个子产品都有不同的操作生产工序
怎么获取到所需的子产品呢?
-- new P1(), new P2(), new P3()....... ?
--使用工厂方法:一个产品对应一个子工厂,再来一个调度者(String name){if "p1" -->newF1().getP1().... }
可是工厂方法只负责=>生产原始产品, 还需要别的操作来继续加工, 怎么办? 改造子工厂加入工序 f1(), f2() ?
那么要加工进来的配件呢?工厂直接new 配件?这样一来,工厂也脱离了本意,所以有一种“ 建造者模式 ”, 使用了工人的角色代替工厂, 解决产品需要加工的问题。
在eclipse 上开发:
第一级目录: 产品抽象类+ 接口加工 + 工人调度者+ 配件父类(普通类)//抽象产品类:
public class Computer {
//定义属性:产品名称
private String name;
//电脑的众多配件
private List<Units> units=new ArrayList<>();
public Computer(){}
public Computer(String name){this.name=name;}
public String toString(){
String mess="{";
for(int i=0;i<units.size();i++){
mess+=units.get(i).getName();
if(i!=units.size()-1){
mess+=",";
}else{
mess+="}";
}
}
return name+mess;
}
//省略set,get.....
public class Computer_Acer extends Computer{
public Computer_Acer(){}
public Computer_Acer(String name){super(name);}
}
public class Computer_Apple extends Computer{
public Computer_Apple(){}
public Computer_Apple(String name){super(name);}
}
public class Computer_Dell extends Computer{
public Compute
4000
r_Dell(){}
public Computer_Dell(String name){super(name);}
}
//属性:组件--原材料
List<Units> units=Arrays.asList(new Units[] {
new Units_disk("材料1"),new Units_ram("材料2"),new Units_cpu("材料3")});
Manager manager;
//======================开始junit测试===================
public static void main(String[] args) {
junit.textui.TestRunner.run(BuilderModeTest.class);
}
//======定义:各个测试方法=======
//创建一个管理者,给一个工人
public void testAcerPc( ){
manager=new Manager(new Builder_AcerPc());//传一个Acer工人
Computer pc=manager.makeComputer(units); //得到Acer pc
System.out.println(pc+"\n");
}
public void testApplePc( ){
manager=new BussinessManager(new Builder_ApplePc());//传一个Apple工人
Computer pc=manager.makeComputer(units); //得到Apple pc
System.out.println(pc+"\n");
}
public void testDellPc( ){
manager=new BussinessManager(new Builder_DellPc());//传一个Dell工人
Computer pc=manager.makeComputer(units); //得到Dell pc
System.out.println(pc+"\n");
}
}
怎么获取到所需的子产品呢?
-- new P1(), new P2(), new P3()....... ?
--使用工厂方法:一个产品对应一个子工厂,再来一个调度者(String name){if "p1" -->newF1().getP1().... }
可是工厂方法只负责=>生产原始产品, 还需要别的操作来继续加工, 怎么办? 改造子工厂加入工序 f1(), f2() ?
那么要加工进来的配件呢?工厂直接new 配件?这样一来,工厂也脱离了本意,所以有一种“ 建造者模式 ”, 使用了工人的角色代替工厂, 解决产品需要加工的问题。
在eclipse 上开发:
第一级目录: 产品抽象类+ 接口加工 + 工人调度者+ 配件父类(普通类)//抽象产品类:
public class Computer {
//定义属性:产品名称
private String name;
//电脑的众多配件
private List<Units> units=new ArrayList<>();
public Computer(){}
public Computer(String name){this.name=name;}
public String toString(){
String mess="{";
for(int i=0;i<units.size();i++){
mess+=units.get(i).getName();
if(i!=units.size()-1){
mess+=",";
}else{
mess+="}";
}
}
return name+mess;
}
//省略set,get.....
//定义加工接口:工作标准--创建半成品,精加工,出货 public interface Builder { Computer makeBasePc(); void addUnits(Units u); Computer getProductPc(); }
//承包商:管理所有建造者, 使得建造者完成工作,产出货物---各种电脑 public class Manager { //属性:一个被管理的工人 private Builder builder; //构造器:赋值初始化 public Manager (Builder b){ this.builder=b; } //调度:工人工作--->获得产品 public Computer makeComputer(List<Units> list){ builder.makeBasePc(); for(Units u: list){ builder.addUnits(u); } return builder.getProductPc(); } }
//配件父类 public class Units { //属性:定义该部件名称 private String name; public Units(){} public Units(String name){ this.name=name;} public String getName() { return name; } public void setName(String name) { this.name = name; } }第二级目录:具体产品类+ 具体配件类+ 具体单技能工人类 //具体子产品
public class Computer_Acer extends Computer{
public Computer_Acer(){}
public Computer_Acer(String name){super(name);}
}
public class Computer_Apple extends Computer{
public Computer_Apple(){}
public Computer_Apple(String name){super(name);}
}
public class Computer_Dell extends Computer{
public Compute
4000
r_Dell(){}
public Computer_Dell(String name){super(name);}
}
//组件之 cpu public class Units_cpu extends Units { public Units_cpu(){} public Units_cpu(String name) { super(name+"cpu");} } //组件之 硬盘 public class Units_disk extends Units { public Units_disk(){} public Units_disk(String name) { super(name+"disk");} } //组件之 缓存条 public class Units_ram extends Units { public Units_ram(){} public Units_ram(String name) { super(name+"ram"); } }
//建造者1:专门负责制造Acer pc public class Builder_AcerPc implements Builder { //属性:产品 Computer_Acer pc; @Override public Computer makeBasePc() {//创造半成品 pc=new Computer_Acer("Acer pc"); return pc; } @Override public void addUnits(Units u) { pc.getUnits().add(u);//往电脑里加入一个组件 System.out.println(pc.getName()+" 加入"+u.getName()); } @Override public Computer getProductPc() { return pc;//返回出货产品 } } //建造者2:专门负责制造Apple pc public class Builder_ApplePc implements Builder { //属性:产品 Computer_Apple pc; @Override public Computer makeBasePc() {//创造半成品 pc=new Computer_Apple("Apple pc"); return pc; } @Override public void addUnits(Units u) {//往电脑里加入一个组件 pc.getUnits().add(u); System.out.println(pc.getName()+"--加入--"+u.getName()); } @Override public Computer getProductPc() {//返回出货产品 return pc; } } //建造者3:专门负责制造Apple pc public class Builder_DellPc implements Builder{ //属性:产品 Computer_Dell pc; @Override public Computer makeBasePc() {//创造半成品 pc=new Computer_Dell("Dell pc"); return pc; } @Override public void addUnits(Units u) {//往电脑里加入一个组件 pc.getUnits().add(u); System.out.println(pc.getName()+"--加入--"+u.getName()); } @Override public Computer getProductPc() {//返回出货产品 return pc; } }测试类:使用junitpublic class BuilderModeTest extends TestCase {
//属性:组件--原材料
List<Units> units=Arrays.asList(new Units[] {
new Units_disk("材料1"),new Units_ram("材料2"),new Units_cpu("材料3")});
Manager manager;
//======================开始junit测试===================
public static void main(String[] args) {
junit.textui.TestRunner.run(BuilderModeTest.class);
}
//======定义:各个测试方法=======
//创建一个管理者,给一个工人
public void testAcerPc( ){
manager=new Manager(new Builder_AcerPc());//传一个Acer工人
Computer pc=manager.makeComputer(units); //得到Acer pc
System.out.println(pc+"\n");
}
public void testApplePc( ){
manager=new BussinessManager(new Builder_ApplePc());//传一个Apple工人
Computer pc=manager.makeComputer(units); //得到Apple pc
System.out.println(pc+"\n");
}
public void testDellPc( ){
manager=new BussinessManager(new Builder_DellPc());//传一个Dell工人
Computer pc=manager.makeComputer(units); //得到Dell pc
System.out.println(pc+"\n");
}
}
相关文章推荐
- Java设计模式学习记录-建造者模式
- java设计模式之建造者模式
- java设计模式之建造者模式
- JAVA设计模式之 建造者模式【Builder Pattern】
- Java 设计模式情景分析——建造者模式
- java设计模式之建造者模式
- Java设计模式之建造者模式
- Java设计模式之建造者模式
- JAVA设计模式是个什么玩意儿_04_建造者模式
- Java设计模式之建造者模式(Builder模式)
- Java设计模式—建造者模式
- Java 23种设计模式之建造者模式
- Java设计模式之建造者模式
- Java设计模式——建造者模式
- Java 设计模式之建造者模式的详解(创建模式)
- Java开发中的23种设计模式详解----建造者模式
- JAVA设计模式之【建造者模式】
- 232_尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】_建造者模式详解
- java设计模式之建造者设计模式
- java设计模式:建造者模式