linkin大话设计模式--建造模式



建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。



建造模式的结构:

抽象建造者角色(Builder):给出一个抽象的接口,用来规范产品对象的各个组成成分的建造。

具体建造者角色(ConcreteBuilder):

1.实现抽象建造者所申明的接口,给出一步一步地完成创建产品实例的操作。

2.在建造过程完成后,提供产品的实例。

导演者角色(Director):用来调用具体建造者以创建产品对象。

产品角色(Product):要建造的对象。



在什么情况下使用建造模式?个人觉得有点绕,没有多少体会。。。
1.需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以仅仅是一个对象的一个组成成分。
2.需要生成的产品对象的属性互相依赖。
3.在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品的创建过程中不易得到。


代码如下:
public class MyCarTest {
public static void main(String[] args) {
//建造模式 指定一个导演 然后创建出不同的产品
Director d=new Director();
Car car=d.buildCar();
System.out.println(car);
Train train=d.buildTrain();
System.out.println(train);
} } //导演者角色 直接暴露给客户端创建自己的产品
class Director {
private BuildeCar bc=new BuilderCar();
private BuildeTrain bt=new BuilderTrain();
//命令造汽车
public Car buildCar(){
bc.carPart1();
bc.carPart2();
bc.carPart3();
Car car=bc.carOver();
return car;
} //命令造火车
public Train buildTrain(){
bt.trainPart();
bt.loco();
Train train=bt.trainOver();
return train;
} } //对火车来说 抽象建造者角色接口
interface BuildeTrain{ public void trainPart();
public void loco();
public Train trainOver();
} //对汽车来说 抽象建造者角色接口
interface BuildeCar{ public abstract void carPart1();
public abstract void carPart2();
public abstract void carPart3();
public abstract Car carOver();
} class BuilderTrain implements BuildeTrain{
private Train train=new Train();
public void trainPart(){
System.out.println("火车的车厢造好了...");
}
public void loco(){
System.out.println("火车头造好了...");
}
public Train trainOver(){
return train;
}
} class BuilderCar implements BuildeCar{
private Car car=new Car();
public void carPart1(){
System.out.println("汽车的框架完成了...");
}
public void carPart2(){
System.out.println("汽车的底盘完成了...");
}
public void carPart3(){
System.out.println("汽车的轮胎完成了...");
}
public Car carOver(){
return car;
}
} class Car {
public String toString (){
return "汽车产品...";
}
} class Train {
public String toString(){
return"火车产品...";
}
}

linkin大话设计模式--建造模式的更多相关文章

  1. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  2. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  3. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  4. linkin大话设计模式--门面模式

    linkin大话设计模式--门面模式 随着系统的不断改进和开发,他们会变得越来越复杂,系统会生成大量的类,这使得程序的流程更加难以理解.门面模式可以为这些类提供一个简易的接口,从而简化访问这些类的复杂 ...

  5. linkin大话设计模式--策略模式

    linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi]  策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...

  6. linkin大话设计模式--命令模式

    linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...

  7. linkin大话设计模式--代理模式

    代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...

  8. linkin大话设计模式--单例模式

    linkin大话设计模式 开文前先弱弱的问一句:什么是设计模式?我在研究java2ee的时候有研究过,在学js的时候也有看到.设计模式的概念最早源于建筑设计大师<建筑的永恒算法>一书,它表 ...

  9. linkin大话设计模式--抽象工厂

    linkin大话设计模式--抽象工厂 在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了  现在要是还想彻底解耦的话怎么办呢 ...

随机推荐

  1. Linux常见命令(权限)

    创建a.txt和b.txt文件,将他们设为其拥有者和所在组可写入,但其他以外的人则不可写入:chmod ug+w,o-w a.txt b.txt 创建c.txt文件所有人都可以写和执行chmod a= ...

  2. Java生成微信二维码及logo二维码

    依赖jar包 二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例. QrCode.jar:https://pan.baidu.com/s ...

  3. Nginx性能优化技巧(6)

    一.编译安装过程优化 1.减小Nginx编译后的文件大小 在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆 ...

  4. Zabbix实战-简易教程--技巧一(操作类技巧)

    一.常用操作技巧 1.克隆 监控项.模板.触发器都可以进行克隆.其中,模板克隆又分为克隆和完全克隆.完全克隆会将LLD也一起复制一份,就是和之前的模板一模一样,而模板的克隆只是克隆监控项,不复制低层次 ...

  5. eclipse安装java web插件

    1 查看eclipse版本 找到eclipse的安装目录,找到readme文件,打开其中的html文件,我的是4.6版本的,代号是oxygen 2 安装 打开eclipse,点击help-Instal ...

  6. 基本命令行操作1(java编译)

    1. 设置环境变量,具体:https://www.cnblogs.com/shinge/p/5500002.html "cd + 文件名" 可进入指定文件,"cd..&q ...

  7. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch正则化和程序框架 听课笔记

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  8. BZOJ:4869: [Shoi2017]相逢是问候

    4869: [Shoi2017]相逢是问候 先说点正经的…… 显然做了有限次(我只知道是有限次,而且不会大,别人说是log次?)修改以后会达到不动点,即以后怎么修改都不变了. 然后就随便做了.(3个l ...

  9. [51nod1425]减减数

    初始给定一个整数n.每次可以对其做一个操作,这个操作是将n减去他其中的某一位.得到新的一个数字n',然后继续操作,直到他变成0为止. 比如24这个例子,24 → 20 → 18 → 10 → 9 → ...

  10. Codeforces780C

    题解:n个气球 从1到n染色,如果a.b和c是不同的正方形,a和b在它们之间有一条直接的路径,b和c之间有一条直接的路径,然后在这三个方块上的气球颜色是不同的. AC代码 #include <s ...