设计模式之-----建造者模式
来源:互联网 发布:肌研极润怎么样知乎 编辑:程序博客网 时间:2024/06/07 22:24
今天学习了建造者模式,所谓建造者,就是将步骤一样,但是具体内容不一样的方法封装起来。我个人感觉和工厂模式有些相似之处。
首先举个例子,汽车生产的时候,不管什么汽车,组装的步骤,方式,大体上都是一样的,从这个角度来看,宝马汽车和奇瑞QQ就是一样的,他们都是汽车,区别就在于他们的用料,以及具体细节的不同,我们就用这个为例子。我不在过多的解释了,代码里有注释的。
首先看包结构
下边是具体代码:
car类,是所有汽车的抽象
package com.builder.product;import java.util.ArrayList;import java.util.List;/** * 汽车的抽象类,封装了汽车都有的一些共同特征 * @author ZHENGWEI * @date Jul 26, 2015 */public abstract class Car {private List<String> carList = new ArrayList<String>();/** * 最后组装汽车要用的方法 * @param str */public void add(String str){System.out.println("为汽车新增了:"+str);carList.add(str);}/** * 显示汽车由哪些零件组成 */public void show(){for(String str : this.carList){System.out.println(str);}}}
之后是具体的那个汽车
package com.builder.product;public class BMW extends Car{private String str = "增加了宝马特有的安全刹车系统";public BMW(){super();super.add(this.str);}}
package com.builder.product;public class QQ extends Car{//这个就不要在意QQ有没有这个东西了,只是个例子private String str = "奇瑞QQ特有的安全刹车系统";public QQ(){super();super.add(this.str);}}
下面是建造者了,先定义接口
package com.builder.builder;import com.builder.product.Car;/** * 建造者的接口,不管生产什么样子的汽车,这几个步骤是一定要有的 * @author ZHENGWEI * @date Jul 26, 2015 */public interface IBuilder {/** * 增加发动机,每个汽车都需要发动机 */public void addMotor();/** * 增加方向盘 */public void addSteering();/** * 增加车轮 */public void addTyre();/** * 返回car的实例 * @return */public Car getCar();//还有许多零件,这里就不一一列举了。。。}
然后是两个具体实现类
package com.builder.builder;import com.builder.product.BMW;import com.builder.product.Car;/** * 宝马的建造者 * @author ZHENGWEI * @date Jul 26, 2015 */public class BMWBulider implements IBuilder {private BMW bmw = new BMW();public void addMotor() {bmw.add("宝马V8发动机,排量4.0");}public void addSteering() {bmw.add("宝马电动助力方向盘");}public void addTyre() {bmw.add("米其林轮胎,宝马专用版");}public Car getCar() {return bmw;}}
package com.builder.builder;import com.builder.product.Car;import com.builder.product.QQ;/** * QQ的建造者 * @author ZHENGWEI * @date Jul 26, 2015 */public class QQBuilder implements IBuilder {private QQ qq = new QQ();public void addMotor() {qq.add("奇瑞QQ普通发动机,排量1.0");}public void addSteering() {qq.add("奇瑞QQ普通无助力方向盘");}public void addTyre() {qq.add("奇瑞QQ普通轮胎");}public Car getCar() {return qq;}}
之后比较重要的就是导演类了,这个类负责全局的调用和指挥建造者
package com.builder.director;import com.builder.builder.IBuilder;public class Director {private IBuilder builder;/** * 构造方法,传入该接口的实现,即具体的某个生产者 * @param builder */public Director(IBuilder builder){this.builder = builder;}/** * 开始组装,这里,每个汽车的组装方式,组装顺序都是一样的 */public void startAdd(){this.builder.addMotor();this.builder.addSteering();this.builder.addTyre();}}
最后来一个测试类
package com.builder.main;import com.builder.builder.BMWBulider;import com.builder.builder.IBuilder;import com.builder.builder.QQBuilder;import com.builder.director.Director;import com.builder.product.Car;public class BuilderMain {public static void main(String[] args) {IBuilder bmwBuil = new BMWBulider();//宝马Director director = new Director(bmwBuil);director.startAdd();Car bmwCar = bmwBuil.getCar();bmwCar.show();IBuilder qqBuil = new QQBuilder();//QQDirector director1 = new Director(qqBuil);director.startAdd();Car qqCar = bmwBuil.getCar();qqCar.show();}}
最后是结果
原则上来说,这个模式就是封装了不变的,区别的变化的,将变与不变分开,使结构更清晰。
0 0
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者模式学习
- 设计模式之建造者模式
- 设计模式笔记之---建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- 01-复杂度1. 最大子列和问题(20)
- Eclipse里添加Tomcat服务器
- leetcode[224]:Basic Calculator
- 字符串指针与char型指针数组
- KNN算法学习--python实现和java实现
- 设计模式之-----建造者模式
- 曾国藩:成大事者不纠结
- C++类中静态变量和静态方法的注意事项
- AfxGetApp()解析
- poj3267 The Cow Lexicon -DP
- Struts2-02
- zoj博弈月赛
- OC 基础知识要点
- C++的头文件和实现文件分别写什么