您的位置:首页 > 产品设计 > UI/UE

(6)设计模式笔记[Builder模式]

2011-04-28 15:16 232 查看
package com.vatana.bulider.framework;
/**
* Builder类就像是砖,瓦,钢筋,水泥
* 一切基本元素。
* 这里展示4个方法:执行前,执行中,执行后,执行结果
* @author Vatana
*/
public abstract class Builder {
public abstract void on_before(String msg);
public abstract void on_do(String msg);
public abstract void on_after(String msg);
public abstract String getResult();
}


package com.vatana.bulider;
import com.vatana.bulider.framework.Builder;
/**
* 创建样式
* 具体的元素,如果说Builder是砖,瓦,水泥
* 那这里就是指什么样的砖,什么样的瓦,什么牌的水泥,
* 已经见到实物,一般不会改变了
* @author Vatana
*/
public class TextBuilder extends Builder{
private StringBuffer sb = new StringBuffer();
@Override
public void on_before(String msg) {
sb.append("<begin>");
sb.append(msg);
sb.append("</begin>/n");
}
@Override
public void on_do(String msg) {
sb.append("<do>");
sb.append(msg);
sb.append("</do>/n");
}
@Override
public void on_after(String msg) {
sb.append("<after>");
sb.append(msg);
sb.append("</after>/n");
}
@Override
public String getResult() {
return sb.toString();
}

}


package com.vatana.bulider;
import com.vatana.bulider.framework.Builder;
/**
* Director类是设计师,建筑师,导演
* 它定义了Builder类中各个元素的执行顺序
* 需要修改时直接修改此类或直接创建新类,不会影响其它逻辑
* @author Vatana
*/
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public String constract(){
builder.on_before("on before,init something.");
builder.on_do("on do, excute something.");
builder.on_after("on after,end something.");
return builder.getResult();
}
}


package com.vatana.bulider;
import com.vatana.bulider.framework.Builder;
/**
* 用盖楼的概念认识builder模式。
* 这个模式是众多模板引擎的基础。
* 与Template模式很接近,
* 不同的是,Template在父类定义元素种类和结构,然后在子类确定实际元素,结构是单一的、不可变的、
* 而builder只在父类定义元素种类,在子类定义实际元素,在另外一个类(Director)中定义结构。这样的结构具有多样性、可变性。
*
* 在面向对象设计中,“谁知道哪个部分”相当重要。要注意哪个类,能够使用什么方法。
* 在这个例子中 Test类就不需要知道Builder类都有什么方法,只需要Director知道就行
* 而Director也只需知道有那几个方法,具体怎么执行,交给TextBuilder
* @author Vatana
*/
public class Test {
public static void main(String[] a){
Builder tb = new TextBuilder();
Director director = new Director(tb);
String re = director.constract();
System.out.println(re);
}
}


运行结果

run:

<begin>on before,init something.</begin>

<do>on do, excute something.</do>

<after>on after,end something.</after>

成功生成(总时间:1 秒)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: