linkin大话设计模式--建造模式
linkin大话设计模式--建造模式
建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
建造模式的结构:
抽象建造者角色(Builder):给出一个抽象的接口,用来规范产品对象的各个组成成分的建造。
具体建造者角色(ConcreteBuilder):
1.实现抽象建造者所申明的接口,给出一步一步地完成创建产品实例的操作。
2.在建造过程完成后,提供产品的实例。
导演者角色(Director):用来调用具体建造者以创建产品对象。
产品角色(Product):要建造的对象。
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大话设计模式--建造模式的更多相关文章
- linkin大话设计模式--常用模式总结
linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...
- linkin大话设计模式--模板方法模式
linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...
- linkin大话设计模式--桥接模式
linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...
- linkin大话设计模式--门面模式
linkin大话设计模式--门面模式 随着系统的不断改进和开发,他们会变得越来越复杂,系统会生成大量的类,这使得程序的流程更加难以理解.门面模式可以为这些类提供一个简易的接口,从而简化访问这些类的复杂 ...
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- linkin大话设计模式--命令模式
linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...
- linkin大话设计模式--代理模式
代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...
- linkin大话设计模式--单例模式
linkin大话设计模式 开文前先弱弱的问一句:什么是设计模式?我在研究java2ee的时候有研究过,在学js的时候也有看到.设计模式的概念最早源于建筑设计大师<建筑的永恒算法>一书,它表 ...
- linkin大话设计模式--抽象工厂
linkin大话设计模式--抽象工厂 在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了 现在要是还想彻底解耦的话怎么办呢 ...
随机推荐
- jquery 获取URL相对/绝对路径问题
在B/s系统中,使用jquery做图片上传时通常会遇到获取不到路径的的问题,这是因为系统不允许浏览器的访问而进行限制造成的, 一般获取到的都是C://Program Files/~/文件位置.而在有时 ...
- 深入理解ES6之—数据解构
一 对象解构 对象解构语法在赋值语句的左侧使用了对象字面量 let node = { type: true, name: false } //既声明又赋值 let { type, name } = n ...
- MySQL在并发场景下的问题及解决思路
目录 1.背景 2.表锁导致的慢查询的问题 3.线上修改表结构有哪些风险? 4.一个死锁问题的分析 5.锁等待问题的分析 6.小结 1.背景 对于数据库系统来说在多用户并发条件下提高并发性的同时又要保 ...
- Send Email in .NET Core 2.0
在.NET Core 1.0 中,SMTP Client代码并没有被移植,直到.NET Core 2.0的发布.使用下面的代码: static void Main(string[] args) { S ...
- Ajax提交Form表单的一种方法
待提交的表单 <form id="updatePublicKey" enctype="multipart/form-data"> <div c ...
- JAVA基础-IO流(二)
一.字节流 字节流是通过字节来进行读写操作的,他的使用对象相比于字符流来说更加的广泛.这主要是因为他们读写文件的方式而决定的.字符流读写文件时是将读取到的字节通过默认编码表转换成字符,在通过默认编码表 ...
- makefile在编译的过程中出现“except class name”
今天写了部分代码,在添加到项目中后就那些编译,出现问题如下: logistic_regression_layer.h::: error: expected class name public Laye ...
- Flask-SQLAlchemy.........>model创建表
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarat ...
- bzoj:1776: [Usaco2010 Hol]cowpol 奶牛政坛
Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...
- C++课程设计类作业4
#include <bits/stdc++.h> using namespace std; class xiexin { public: xiexin() { weight=; grade ...