设计模式学习之路-建造者模式

来源:互联网 发布:vulcan软件 编辑:程序博客网 时间:2024/05/01 14:27

建造者模式,使我们经常提到一个模式,而且很多地方都用到了,比如AlertDialog创建使用Builder。这也是建造者模式的体现,那么我们平时在写代码的时候也可以使用这个方式,来梳理代码逻辑。

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者的UML类图


基本代码

absract class Builder{ public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult();}

<pre name="code" class="java">class ConcreteBuilder1 extends Builder{private Product product = new Product(); @Override public void BuilderPartA(){  product.add("A"); }@Override public void BuilderPartB(){  product.add("B"); }@Override public Product GetResult(){  return product; }}

</pre><pre name="code" class="java">class Director{ public void Construct(Builder builder){  builder.BuilderA();  builder.BuilderB(); }}
class Product { List<String>parts =  new ArrayList<String>(); public void add(String a){  parts.add(a); } public void show(){ for(String : parts){  Log.i("TAG",parts.get(i)); } }}
class ConcreteBuilder2 extends Builder{private Product product = new Product(); @Override public void BuilderPartA(){  product.add("X"); }@Override public void BuilderPartB(){  product.add("Y"); }@Override public Product GetResult(){  return product; }}

客户端

static void main(){ Director d = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); d.construct(b1); Product p1 = b1.Getresult(); p1.show();}

我们以建造小人为例子。先创建一个抽象小人父类,里面有创建头,身体,手,脚等抽象方法。然后在新建一个具体的胖小人实体类和一个瘦小人实体类。新建一个Director指挥者,在里面有个创建人类的方法,调用抽象类的方法,这样只要通过指挥者创建人类,客户端不需要创建人类的复杂过程,只需要调用指挥者类的创建方法就可以了。

看到这儿不禁让我想起了一个相似的模式,那就是策略模式。感觉有点异曲同工之妙。

这里有个造小人的代码例子,很简单。想看呢就下下来看看。

git:https://github.com/SingleShu/BuilderModel




0 0
原创粉丝点击