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. IBM的websphere MQ的c#使用(一)

    接上篇的MQ配置.利用C#实现MQ消息的收发.源码 1.需要引入的dll是amqmdnet.dll 2.app.config配置 <?xml version="1.0" en ...

  2. Python进阶内容(三)--- reduce

    描述 functools.reduce() 函数会对参数序列中元素进行累积.函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集 ...

  3. 【NOIP2012】旅行计划

    题解 双向链表加倍增... 正写着不一定能写对2333 终于写对了... 然而我的双向链表和别人的都不一样... 瑟瑟发抖... 代码 //by 减维 #include<cstdio> # ...

  4. Windows平台下的内存泄漏检测

    在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...

  5. CSS(三)背景 list-style display visibility opacity vertical cursor

    背景background 1.background-color:''   背景颜色 2.background-image:'' 背景图片 background-repeat:'' 背景图片是否平铺 取 ...

  6. 一个Flask运行分析

    当我们安装好Flask环境之后,创建好项目,就会自动生成下面这段代码: from flask import Flask app = Flask(__name__) @app.route('/') de ...

  7. webp图像批量转换软件推荐——XnConvert

    XnConvert是一款简单易用的批量图像格式转换软件,其所支持图片格式有JPG.PNG.TIFF.GIF.RAW.JPEG2000.WebP.OpenEXR等等.你可以轻松的实现图像格式的转换.缩放 ...

  8. js面向对象学习笔记(四):对象的混合写法

    //对象的混合写法//1.构造函数function 构造函数() { this.属性}构造函数.原型.方法 = function () {};//调用var 对象1 = new 构造函数();对象1. ...

  9. Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

    今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... Gym100814B 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把 ...

  10. UEP-时间的比较

    时间的比较: var rec = ajaxform.getRecord(); var sd = rec.get("startDate"); var ed = rec.get(&qu ...