设计模式-建造者模式

来源:互联网 发布:新郎新婚致辞 知乎 编辑:程序博客网 时间:2024/05/22 14:07

建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

分类

抽象建造者(Abstract Builder)角色:给出一个抽象解耦,以规范产品对象的各个组成成分建造。具体建造者类必须实现这个接口锁要求的两种方法:一种是建造方法,另一种是结果返还方法。有多少零件就应该有多少建造方法。
具体建造者(Concrete Builder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品实例。它要完成的任务包括:
A.实现抽象建造者锁声明的接口,给出一步一步地完成创建产品实例的操作;
B.在建造完成之后,提供产品实例。
导演者(Director)角色:调用具体建造者角色以创建产品对象,它与客户端打交道。
产品(Product)角色:它是建造中的复杂对象。

简单实例

抽象建造者:

public interface Builder {public void createFloor();public void createWall();public void createRoof();public void createWindow();}

真实建造者:

中式风格建造

public class ChinaWorker implements Builder {public House house = new ChinaHouse();@Overridepublic void createFloor() {house.setFloor(" create china Floor  ");}@Overridepublic void createRoof() {house.setRoof(" create china Roof  ");}@Overridepublic void createWall() {house.setWall(" create china Roof  ");}@Overridepublic void createWindow() {house.setWindow(" create china Window  ");}@Overridepublic House getHouse() {return house;}}
英式风格建造者
public class EnglishWorker implements Builder {public House house = new EnglishHouse();@Overridepublic void createFloor() {house.setFloor(" create english Floor  ");}@Overridepublic void createRoof() {house.setRoof(" create english Roof  ");}@Overridepublic void createWall() {house.setWall(" create english Roof  ");}@Overridepublic void createWindow() {house.setWindow(" create english Window  ");}@Overridepublic House getHouse() {return house;}}
产品:

public class House {public String floor;public String wall;public String roof;public String window;public String getFloor() {return floor;}public void setFloor(String floor) {this.floor = floor;}public String getWall() {return wall;}public void setWall(String wall) {this.wall = wall;}public String getRoof() {return roof;}public void setRoof(String roof) {this.roof = roof;}public String getWindow() {return window;}public void setWindow(String window) {this.window = window;}}

public class ChinaHouse extends House {}

public class EnglishHouse extends House {}

导演:

public class Designer {public void command(Builder builder) {builder.createFloor();builder.createRoof();builder.createWall();builder.createWindow();}}

客户端:

public class Client {public static void main(String[] args) {Builder builder = new ChinaWorker();House house = new  Designer().command(builder);System.out.println(house.window);builder = new EnglishWorker();house = new  Designer().command(builder);System.out.println(house.window);//create china Window  //create english Window  }}



0 0
原创粉丝点击