首页 > 代码库 > 23种设计模式----------建造者模式
23种设计模式----------建造者模式
建造者模式:像是模板方法模式的升级。也叫生成器模式。将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。其实就是创建一大类的东西, 但是具体又有些差异。
在建造者模式中,一般有四个角色:
1,Product产品类。
该类一般实现了模板方法模式。
2,Builder抽象的建造者。
规范产品的组建,一般是由子类实现。
3,ConcreteBuilder具体的建造者。
实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象。
4,Director导演类(一般是包涵多种具体产品差异的方法)。
大致示例代码:
Product类:
1 package com.yemaozi.builderpattern;2 3 public abstract class Product {4 //一般实现模板方法的抽象类。5 }
具体的Product类:
//ProductApackage com.yemaozi.builderpattern;public class ProductA extends Product{ public void doSomething(){ }}//ProductBpackage com.yemaozi.builderpattern;public class ProductB extends Product{ public void doSomethding(){ }}
建造器:
1 package com.yemaozi.builderpattern;2 3 public interface Builder {4 //设置产品不同的方法5 public abstract void setPart();6 //构建产品7 public abstract Product builderProduct();8 }
具体的建造器,具体的建造器个数与具体产品类的数目一致。
1 //ConcreteBuilderA 2 package com.yemaozi.builderpattern; 3 4 public class ConcreteBuilderA implements Builder{ 5 6 Product p = new ProductA(); 7 8 public void setPart() { 9 }10 11 public Product builderProduct() {12 return p;13 }14 }15 //ConcreteBuilderB16 package com.yemaozi.builderpattern;17 18 public class ConcreteBuilderB implements Builder{19 20 Product p = new ProductB();21 22 public void setPart() {23 }24 25 public Product builderProduct() {26 return p;27 }28 }
导演类:导演类一般是为了预设置不同产品差异的,若是想得到对应的产品,直接到Director里获取,因为,该类就是为了生产出所有的产品,以供获取。导演类一般可以有多个。
1 package com.yemaozi.builderpattern; 2 3 public class Director { 4 private Builder b1 = new ConcreteBuilderA(); 5 private Builder b2 = new ConcreteBuilderB(); 6 //构建A产品 7 public Product getProductA(){ 8 b1.setPart(); 9 Product p = b1.builderProduct();10 return p;11 }12 //构建B产品13 public Product getProductB(){14 b2.setPart();15 return b2.builderProduct();16 }17 }
此外,建造者模式还有一个重要的角色,就是零件(理解为产品类里的方法),建造者是通过零件的组装来创建对象。组装顺序不同(调用方法顺序不同),建造的对象就会有着差异,也是,建造者模式要表达的核心意义。说白了,建造者最主要的功能是基本方法的调用顺序的安排。
和工厂模式的差异:
工厂方法模式重点是创建。创建零件是它的主要职责,组装顺序不是它关心的。
建造者模式重点是对已产生的零件进行组装。从而也达到创建对象的效果。
23种设计模式----------建造者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。