设计模式之创建者模式
来源:互联网 发布:淘宝被卖家关闭订单 编辑:程序博客网 时间:2024/05/01 02:10
Builder模式
主要用于“构建一个复杂的对象”。把复杂对象的创建过程加以抽象,通过子类继承和重写方法,来得到具有复合属性的对象。 同时为了统一创建过程,把对象的创建操作统一封装到Director的方法中。
GOF:讲一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。即构建过程相同,但是子部件却不相同。
抽象工厂注重的是不同的工厂生产不同的产品,builder注重的是某个产品由不同的零件组成,产品的生产工程。
Director就是负责产品组装的,是控制生产过程的;而builder是负责产品部件生产的。这样就实现了“过程”和“部件”的解耦。
抽象工厂通过不同的构建过程生成不同的对象表示,而Builder模式通过相同的构建过程生成不同的表示。
适用性:
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
结构图(Struct):
import java.util.ArrayList;抽象的创建者类,主要给具体的创建者类创建模板,具体的创建者继承该类后,重写方法,用自己的方式创建风格不同的复杂对象的属性。但总体复杂对象的结构已经固定。abstract class Builder{ public abstract void BuildDoor(); public abstract void BuildWall(); public abstract void BuildWindows(); public abstract void BuildHouseCeiling(); public abstract House GetHouse();}具有复杂属性的对象。class House{ private ArrayList <String>parts=new ArrayList<String>(); public void add(String str){ parts.add(str); } public void show() { for(String part:parts) { System.out.println(part+"\t"); } System.out.println("\n"); } }统一创建的过程,将创建过程统一。也可以有具体的流程class Director{ public void construct(Builder builder){ builder.BuildDoor(); builder.BuildWall(); builder.BuildWindows(); builder.BuildHouseCeiling(); }}具体的创建者类,负责创建具有不同表示的复杂对象class ChineseBuilder extends Builder{ private House chineseHouse=new House(); public void BuildDoor() { chineseHouse.add("ChineseDoor"); } public void BuildWall() { chineseHouse.add("ChineseWall"); } public void BuildWindows() { chineseHouse.add("ChineseWindows"); } public void BuildHouseCeiling() { chineseHouse.add("ChineseHouserCeiling"); } public House GetHouse() { return chineseHouse; } }class EnglandBuilder extends Builder{ private House englandHouse=new House(); public void BuildDoor() { englandHouse.add("EnglandDoor"); } public void BuildWall() { englandHouse.add("EnglandWall"); } public void BuildWindows() { englandHouse.add("EnglandWindows"); } public void BuildHouseCeiling() { englandHouse.add("EnglandHouserCeiling"); } public House GetHouse() { return englandHouse; } }public class BuilderPattern { public static void main(String[] args) { Builder chineseBuilder=new ChineseBuilder(); Builder englandBuilder=new EnglandBuilder(); Director director=new Director(); director.construct(chineseBuilder); House chineseHouse=chineseBuilder.GetHouse(); chineseHouse.show(); director.construct(englandBuilder); House englandHouse=englandBuilder.GetHouse(); englandHouse.show(); }}
1 0
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- 设计模式之创建者模式
- JAVA设计模式之创建者模式
- c++ 设计模式之创建者(生成器)模式
- java 设计模式之八-创建者模式
- 设计模式之创建者模式 c++ 实现
- 设计模式之创建者模式(Builder)
- java设计模式 之 创建者模式
- c++ 设计模式之创建者(生成器)模式
- Swift设计模式之创建者模式
- JAVA设计模式之创建者模式
- Java反射机制 -数据库相关
- Eclipse改成中文版本
- Android 最新影视版本更新
- 别把逻辑带进测试代码
- Redis在windows下以服务的形式启动
- 设计模式之创建者模式
- 正则表达式应用——实例应用
- You are running linux kernel version 2.6.32-431.el6.x86_64, which might be unstable running docker.
- SpringMVC拦截器
- jxl与poi两个jar包的区别
- 文章标题
- ionic开发中屏幕的宽度和高度的获得
- PHP流程控制语句-while、do..while循环语句
- 36.支付订单