设计模式 (四)创建者模式(Builder)
更新时间:2023-06-09 11:16:01 阅读量: 实用文档 文档下载
- 设计模式推荐度:
- 相关推荐
设计模式初步学习,一个前言+14种模式
设计模式 (四)创建者模式(Builder)
创建者模式主要是为了所谓的高聚合,解耦合,遇到多种配件于一身的情况的时候,放在实体类里面不合适,放在工厂类也不合适,所以就添加了一个创建者类,专门对相应的零件进行组装,如同汽车了N中配件,同时要是各种配件互相联系的话也在这个Builder里面一并做了。
明天准备去爬山,这个原理图就再补上吧:
今天把uml补上了,不过对于uml初学的我就乱乱的先随便画一个吧,等以后慢慢入门了在斟酌里面的错误和细节:
下面是我自己攒出来的例子(回来的时候着急,把书忘教室了,不知道书上怎么写的,不过明显记得一处错误,构造器也加上了一个void),为了在Builder里面优化一下,用了一下反射,这样就可以直接通过多态来实现对于派生类中的实体类进行初始化并且操作了,简单的实现电脑的组装:通过工厂类实例化Computer的父类指向子类的实例,然后在Builder里面添加一个工厂类的私有变量,通过构造器把要穿件的Computer实例传入Builder,然后对其进行解析,反射得到路径,对其派生类里面的方法进行反射得到相应的配件的集成,转配完成。少说多做:
[java] view plaincopy
1. package com.designpattern.builder;
2.
3. public interface Mouse {
4. public void add();
5. }
[java] view plaincopy
1. package com.designpattern.builder;
2.
设计模式初步学习,一个前言+14种模式
3. public interface Monitor {
4. public void add();
5. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public interface Keyboard {
4. public void add();
5. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public interface Displayer {
4. public void add();
5. }
[java] view plaincopy
1. package com.designpattern.builder;
2.
3. public interface Factory {
4. public Computer buildComputer();
5. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public interface Computer {
4. public void add();
5. }
[java] view plaincopy
1. package com.designpattern.builder;
设计模式初步学习,一个前言+14种模式
3. public class AcerMouse implements Mouse {
4.
5. @Override
6. public void add() {
7. System.out.println("add AcerMouse");
8. }
9.
10. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public class AcerMonitor implements Monitor {
4.
5. @Override
6. public void add() {
7. System.out.println("add AcerMonitor");
8. }
9.
10. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public class AcerKeyboard implements Keyboard {
4.
5. @Override
6. public void add() {
7. System.out.println("add AcerKeyboard");
8. }
9.
10. }
[java] view plaincopy
1. package com.designpattern.builder;
2.
3. public class AcerDisplayer implements Displayer {
设计模式初步学习,一个前言+14种模式
5. @Override
6. public void add() {
7. System.out.println("add AcerDisplayer");
8. }
9.
10. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public class AcerFactory implements Factory {
4.
5. @Override
6. public Computer buildComputer() {
7. return new Acer();
8. }
9. }
[java] view plaincopy 1. package com.designpattern.builder;
2.
3. public class Acer implements Computer {
4.
5. @Override
6. public void add() {
7. System.out.println("builder Acer");
8. }
9.
10. }
[java] view plaincopy
1. package com.designpattern.builder;
2.
3. import ng.reflect.Method;
4.
5. public class Builder {
6. private Factory factory;
设计模式初步学习,一个前言+14种模式
8. public Builder(Factory factory) {
9. this.factory = factory;
10. }
11.
12. public void builder() throws Exception {
13. factory.buildComputer().add();
14. String computer = factory.getClass().toString();
15. computer = computer.substring(6, computer.length() - 7); 16.
17. // build Mouse
18. Class c = Class.forName(computer + "Mouse");
19. Mouse mouse = (Mouse) c.newInstance();
20. Method method = c.getMethod("add", null);
21. method.invoke(mouse, null);
22.
23. // build Keyboard
24. c = Class.forName(computer + "Keyboard");
25. Keyboard keyboard = (Keyboard) c.newInstance();
26. method = c.getMethod("add", null);
27. method.invoke(keyboard, null);
28.
29. // build Displayer
30. c = Class.forName(computer + "Displayer");
31. Displayer displayer = (Displayer) c.newInstance();
32. method = c.getMethod("add", null);
33. method.invoke(displayer, null);
34.
35. // build Monitor
36. c = Class.forName(computer + "Monitor");
37. Monitor monitor = (Monitor) c.newInstance();
38. method = c.getMethod("add", null);
39. method.invoke(monitor, null);
40.
41. System.out.println("build complete");
42. }
43. }
[java] view plaincopy
1. package com.designpattern.builder;
2.
3. public class Client {
设计模式初步学习,一个前言+14种模式
4. public static void main(String[] args) {
5. try {
6. new Builder(new AcerFactory()).builder();
7. } catch (Exception e) {
8. // TODO Auto-generated catch block
9. e.printStackTrace();
10. }
11. }
12. }
本文转自csdn:/column/details/first-study-pattern.html
正在阅读:
统计学基础习题05-26
争做垃圾分类小卫士作文600字06-16
2011山东公务员考试面试01-17
小学生我的中国梦作文500字03-31
高三化学考前专题复习题(“20题”)06-18
素食主义的前世今生03-13
技术转让合同08-10
写给老公生日的话02-17
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 创建者
- 设计模式
- Builder
- 模式
- 数字集成电路设计入门
- 企业办公室工作心得体会
- 2010年会计证《财经法规与会计职业道德》考前押题密卷(7)-中大网校
- THK产品的润滑保养
- 多晶硅设备清洗资料
- 中国地理笔记赵济
- 宝宝不爱吃饭怎么办
- 山东省私营企业就业状况数据分析报告2018版
- 北京理工大学软件学院web安全试验报告
- 打车软件背后的思考
- 服务承诺书范文700字
- 山西省吕梁市七年级下学期数学期末考试试卷
- 五年级下学期生命生态安全教案
- 利用双卡尔曼滤波算法估计电动汽车用锂离子动力电池的内部状态
- 河南省开封市2020┄2021届高三冲刺模拟考试5月 英语Word版
- 第一章 操作系统引论(第1、2、3讲)
- 人教版五年级英语下册第三单元测试题
- 三分钟让你了解智能制造
- (完整版)3DMAX基础教程
- 十大窗帘品牌未来e家窗帘软装不二之选