设计模式-builder(构造器模式)
来源:互联网 发布:c语言定义函数并调用 编辑:程序博客网 时间:2024/04/28 06:13
设计模式-builder(构造器模式)
Bilder模式定义:
将一个复杂对象的构建和表示分离,是同样的创建构建过程可以创造不同的表示。
Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用用不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只是在反复使用中才能体会到。
为何使用建造者模式
是为了将复杂对象的构建过程与它的部件分离。注意: 是解耦过程和部件。因为一个复杂的对象,不但有很多大量组成部分。例如汽车,有很多部件:车轮、方向盘、发动机,还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开。
建造者模式典型结构图
如何使用建造者模式
首先假设一个复杂对象是由多个部件组成的,Builder模式是吧复杂对象的创建和部件的创建分开来,分别用Director和Builder类来表示。如果需要一个接口来创建部件:
- package com.designpatten.builder;
- public interface Builder {
- void buildCarWheel() ;
- void buildSteeringWheel() ;
- void buildEngine() ;
- void buildCarFrame() ;
- Car getCar() ;
- }
在Director中构建复杂对象,将Builder中定义的一个一个部件组装起来。
- package com.designpatten.builder;
- public class Director {
- private Builder builder ;
- public Director(Builder builder){
- this.builder = builder ;
- }
- public void getCarTogether(){
- builder.buildCarFrame() ;
- builder.buildEngine();
- builder.buildCarWheel() ;
- builder.buildSteeringWheel() ;
- }
- }
- 通过实现接口,来完成部件的构建过程
- 重新获得目标对象接口
- package com.designpatten.builder;
- public class BenzBuilder implements Builder {
- private Benz benz ;
- public BenzBuilder(){
- benz = new Benz() ;
- }
- @Override
- public void buildCarWheel() {
- System.out.println("Benz add Wheel");
- }
- @Override
- public void buildSteeringWheel() {
- System.out.println("Benz add SteeringWheel");
- }
- @Override
- public void buildEngine() {
- System.out.println("Benz add engine");
- }
- @Override
- public void buildCarFrame() {
- System.out.println("Benz add frame");
- }
- @Override
- public Car getCar() {
- return benz;
- }
- }
- package com.designpatten.builder;
- public class BMWBuilder implements Builder {
- private BMW bmw ;
- public BMWBuilder(){
- bmw = new BMW() ;
- }
- @Override
- public void buildCarWheel() {
- System.out.println("BMW add CarWheel");
- }
- @Override
- public void buildSteeringWheel() {
- System.out.println("BMW add SteeringWheel");
- }
- @Override
- public void buildEngine() {
- System.out.println("BMW add Engine");
- }
- @Override
- public void buildCarFrame() {
- System.out.println("BMW add Frame");
- }
- @Override
- public Car getCar() {
- return bmw;
- }
- }
- package com.designpatten.builder;
- public interface Car {
- void run() ;
- }
- package com.designpatten.builder;
- public class BMW implements Car {
- @Override
- public void run() {
- System.out.println("BMW ---> run()");
- }
- }
- package com.designpatten.builder;
- public class Benz implements Car {
- @Override
- public void run() {
- System.out.println("Benz -------> run()");
- }
- }
- package com.designpatten.builder;
- public class Client {
- public static void main(String[] args) {
- BenzBuilder benzBuilder = new BenzBuilder() ;
- BMWBuilder bmwBuilder = new BMWBuilder() ;
- Director benzDirector = new Director(benzBuilder) ;
- benzDirector.getCarTogether() ;
- Car benz = benzBuilder.getCar() ;
- benz.run() ;
- System.out.println("----------------------------");
- Director bmwDirector = new Director(bmwBuilder) ;
- bmwDirector.getCarTogether() ;
- Car bmw = bmwBuilder.getCar() ;
- bmw.run() ;
- }
- }
输出结构
- Benz add frame
- Benz add engine
- Benz add Wheel
- Benz add SteeringWheel
- Benz -------> run()
- ----------------------------
- BMW add Frame
- BMW add Engine
- BMW add CarWheel
- BMW add SteeringWheel
- BMW ---> run()
参考:http://www.weixueyuan.net/view/6110.html
0 0
- 设计模式-builder(构造器模式)
- 设计模式-builder(构造器模式)
- 设计模式学习---Builder(构造器)
- java设计模式---builder---构造器
- 设计模式之构造器Builder
- Builder构造者设计模式
- 设计模式之构造器模式(Builder)
- 设计模式:Builder模式
- 设计模式 -- BUILDER模式
- 【设计模式】Builder模式
- 设计模式-Builder模式
- 设计模式Builder模式
- 设计模式-Builder模式
- 设计模式 - Builder模式
- 设计模式 - Builder模式
- 设计模式---Builder模式
- 设计模式--Builder模式
- 设计模式---Builder模式
- PHP设计模式——单例模式
- 顶级风投First Round Capital对创业者的30个建议
- Android截屏分享
- 用Android-X86和VirtualBox打造高性能Android开发环境
- IsPostBack结论
- 设计模式-builder(构造器模式)
- 西门子PLC学习笔记十七-(不带参数FC编程二)
- iOS UIImageView设置多张图片
- qsort函数使用方法
- c++与oc混编
- 译文 日经春秋 20150119
- 用visual event查看鼠标事件触发了什么jquery代码
- iOS之NSRange的使用
- linux进程间共享内存通信详解