Builder设计模式
2016-07-27 16:58
525 查看
Builder设计模式一般会采用链式编程结构
案例分析?
构建一台电脑(内存、CPU、显卡等等.....)
内存:ram(运行内存)和rom(非运行内存)
分为了一些角色
Builder-->抽象类(规范产品组装)-->案例中Builder接口
ConcrateBuilder-->具体组装产品类-->案例MacBookProBuilder
Product--->具体的产品-->案例Computer
Director-->统一组装-->案例Director
UML结构
关联关系:没有你我可以生存,你没有我同样可以生存
聚合关系:没有你我可以生存,你没有我就不可以生存
组合关系:没有你我不能生存,你没有我同样不能生存
项目结构:
package com.example.builder:
package com.example.builder;
/**
* 抽象Builder类(规范产品)
*
*/
public interface Builder {
// 内存
public Builder setMemory(String memory);
// cpu
public Builder setCpu(String cpu);
// 显卡
public Builder setDisplay(String display);
// 系统
public Builder setOs(String os);
/**
* 构建电脑
* @return
*/
public Computer build();
}
package com.example.builder;
/**
* 组装电脑
*
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}package com.example.builder:
package com.example.builder;
/**
* 组装电脑
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}
package com.example.builder.test:
package com.example.builder.test;
import com.example.builder.Builder;
import com.example.builder.Director;
import com.example.builder.impl.MacBookProBuilder;
/**
* 客户端
*/
public class Test {
public static void main(String[] args) {
Builder builder = new MacBookProBuilder();
builder.setCpu("").setDisplay("").setMemory("").setOs("").build();
Director director = new Director(builder);
director.computerDirector("16 GB 1867 MHz DDR3",
"3.1 GHz Intel Core i7", "Intel Iris Graphics 6100 1536 MB", "10.11.5 (15F34)");
System.out.println(builder.build().toString());
}
}
运行结果:
苹果电脑cpu:
苹果电脑display:
苹果电脑memory:
电脑类型:
苹果电脑os:
苹果电脑memory:16 GB 1867 MHz DDR3
苹果电脑cpu:3.1 GHz Intel Core i7
苹果电脑display:Intel Iris Graphics 6100 1536 MB
电脑类型:10.11.5 (15F34)
苹果电脑os:10.11.5 (15F34)
Computer [memory=16 GB 1867 MHz DDR3, cpu=3.1 GHz Intel Core i7, display=Intel Iris Graphics 6100 1536 MB, os=10.11.5 (15F34)]
整理自ppt
案例分析?
构建一台电脑(内存、CPU、显卡等等.....)
内存:ram(运行内存)和rom(非运行内存)
分为了一些角色
Builder-->抽象类(规范产品组装)-->案例中Builder接口
ConcrateBuilder-->具体组装产品类-->案例MacBookProBuilder
Product--->具体的产品-->案例Computer
Director-->统一组装-->案例Director
UML结构
关联关系:没有你我可以生存,你没有我同样可以生存
聚合关系:没有你我可以生存,你没有我就不可以生存
组合关系:没有你我不能生存,你没有我同样不能生存
项目结构:
package com.example.builder:
package com.example.builder;
/**
* 抽象Builder类(规范产品)
*
*/
public interface Builder {
// 内存
public Builder setMemory(String memory);
// cpu
public Builder setCpu(String cpu);
// 显卡
public Builder setDisplay(String display);
// 系统
public Builder setOs(String os);
/**
* 构建电脑
* @return
*/
public Computer build();
}
package com.example.builder; /** * 电脑 */ public class Computer { // 内存 private String memory; // CPU private String cpu; // 显卡 private String display; // 系统 private String os; public Computer() { super(); } public Computer(String memory, String cpu, String display, String os) { super(); this.memory = memory; this.cpu = cpu; this.display = display; this.os = os; } public String getMemory() { return memory; } public void setMemory(String memory) { this.memory = memory; } public String getCpu() { return cpu; } public void setCpu(String cpu) { this.cpu = cpu; } public String getDisplay() { return display; } public void setDisplay(String display) { this.display = display; } public String getOs() { return os; } public void setOs(String os) { this.os = os; System.out.println("电脑类型:" + os); } @Override public String toString() { return "Computer [memory=" + memory + ", cpu=" + cpu + ", display=" + display + ", os=" + os + "]"; } }
package com.example.builder;
/**
* 组装电脑
*
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}package com.example.builder:
package com.example.builder;
/**
* 组装电脑
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}
package com.example.builder.test:
package com.example.builder.test;
import com.example.builder.Builder;
import com.example.builder.Director;
import com.example.builder.impl.MacBookProBuilder;
/**
* 客户端
*/
public class Test {
public static void main(String[] args) {
Builder builder = new MacBookProBuilder();
builder.setCpu("").setDisplay("").setMemory("").setOs("").build();
Director director = new Director(builder);
director.computerDirector("16 GB 1867 MHz DDR3",
"3.1 GHz Intel Core i7", "Intel Iris Graphics 6100 1536 MB", "10.11.5 (15F34)");
System.out.println(builder.build().toString());
}
}
运行结果:
苹果电脑cpu:
苹果电脑display:
苹果电脑memory:
电脑类型:
苹果电脑os:
苹果电脑memory:16 GB 1867 MHz DDR3
苹果电脑cpu:3.1 GHz Intel Core i7
苹果电脑display:Intel Iris Graphics 6100 1536 MB
电脑类型:10.11.5 (15F34)
苹果电脑os:10.11.5 (15F34)
Computer [memory=16 GB 1867 MHz DDR3, cpu=3.1 GHz Intel Core i7, display=Intel Iris Graphics 6100 1536 MB, os=10.11.5 (15F34)]
整理自ppt
相关文章推荐
- Android view中的requestLayout和invalidate方法
- Android Training--Managing the System UI
- 我的Android进阶之旅------>解决DownloadManager报错java.lang.SecurityException: Invalid value for visibility: 2
- DES对称加密算法 CryptoUitls
- Debugging performance issues in Go programs
- Android 同时集成阿里云推送和阿里百川IM会报BuildConfig.class重复的错
- ./configure: error: SSL modules require the OpenSSL library
- [LeetCode] 62. Unique Paths
- Qt Quick 底部导航+路径动画
- Error:java: javacTask: source release 8 requires target release 1.8
- UGUI通用脚本
- ios queue及GCD理解的文章
- ScrollView嵌套TableView,左划删除手势失效解决方案
- JD-GUI在Ubuntu 14.04 64位系统依赖包失败的问题
- Web---session技术代码演示(request,session,servletContext)
- Web---session技术代码演示(request,session,servletContext)
- 学习笔记- AVFoundation Programming Guide - Still and Video Media Capture
- JAVA基础---break语句和continue语句
- basePath = request.getScheme()+"://"+request.getServerName()+":"+
- easyui的datagrid显示或隐藏列