Java 设计模式:创建者模式
1、什么是创建者模式
创建者模式(Builder)是将一个复杂的对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。比如就建造房子为例,现实生活中房子的样子是各种各样的,而且每座房子内的格局、大小等等都不一样,但是建造房子的流程基本都是一样的。创建者模式就是创建的流程保持不变,但是流程中每一步的细节是可以变化的,从而创建出不同的产品。
创建者模式中包括以下几个角色
(1)、Builder
抽象建造者类,规定了产品的各个组成部分,并声明获取建造完成后产品的抽象方法。
(2)、ConcreteBuilder
具体建造者类,根据不同对象的创建逻辑,具体化创建过程,建造完成后可以获取具体产品。
(3)、Director
指挥者类,调用不同的创建者建造具体产品的各个组成部分,保证具体产品各个部分按固定流程创建。
(3)、Product
要创建的产品,有不同的部件组成。
2、同样使用《大话设计模式》中造小人的例子用Java实现。
在游戏角色中需要创建人物,人物包括头、手、身体、脚等信息,但是又分为胖的人物和瘦的人物。代码如下
(1)、设计产品类 People
class People { private List<String> parts = new ArrayList<String>(); public void addPart(String part) { this.parts.add(part); } public void show() { System.out.println("产品信息......."); for (int i = 0; i < parts.size(); i++) { System.out.println(parts.get(i)); } } }
(2)、设计抽象建造者类IBuilder
interface IBuilder { public void buildHead(); public void buildBody(); public void buildHand(); public void buildFeet(); public People getBuildPeople(); }
(3)、设计具体建造者类FatPeopleBuilder和ThinPeopleBuilder
1 class FatPeopleBuilder implements IBuilder 2 { 3 private People fatpeople = new People(); 4 5 @Override 6 public void buildHead() 7 { 8 // TODO Auto-generated method stub 9 fatpeople.addPart("胖人的头"); 10 } 11 12 @Override 13 public void buildBody() 14 { 15 // TODO Auto-generated method stub 16 fatpeople.addPart("胖人的身体"); 17 } 18 19 @Override 20 public void buildHand() 21 { 22 // TODO Auto-generated method stub 23 fatpeople.addPart("胖人的手"); 24 } 25 26 @Override 27 public void buildFeet() 28 { 29 // TODO Auto-generated method stub 30 fatpeople.addPart("胖人的脚"); 31 } 32 33 @Override 34 public People getBuildPeople() 35 { 36 // TODO Auto-generated method stub 37 return fatpeople; 38 } 39 } 40 41 class ThinPeopleBuilder implements IBuilder 42 { 43 44 private People thinpeople = new People(); 45 46 @Override 47 public void buildHead() 48 { 49 // TODO Auto-generated method stub 50 thinpeople.addPart("瘦人的头"); 51 } 52 53 @Override 54 public void buildBody() 55 { 56 // TODO Auto-generated method stub 57 thinpeople.addPart("瘦人的身体"); 58 } 59 60 @Override 61 public void buildHand() 62 { 63 // TODO Auto-generated method stub 64 thinpeople.addPart("瘦人的手"); 65 } 66 67 @Override 68 public void buildFeet() 69 { 70 // TODO Auto-generated method stub 71 thinpeople.addPart("瘦人的脚"); 72 } 73 74 @Override 75 public People getBuildPeople() 76 { 77 // TODO Auto-generated method stub 78 return thinpeople; 79 } 80 81 }
(4)、设计调度类Director
class Director { public void build(IBuilder builder) { builder.buildBody(); builder.buildFeet(); builder.buildHand(); builder.buildHead(); } }
(5)、测试
public class BuilderTest { public static void main(String args[]) { Director director = new Director(); IBuilder builder = new FatPeopleBuilder(); // 创建胖人 director.build(builder); builder.getBuildPeople().show(); // 创建瘦人 builder = new ThinPeopleBuilder(); director.build(builder); builder.getBuildPeople().show(); } }
创建者模式的好处是客户端不必关系产品对象的具体组成细节,具体的建造者之间相互独立方便扩展。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。