建造模式的作用,把一个复杂对象的构建与它的表示分离开来。
一般通用的建造者模式的uml类图:
Builder接口,定义了需要建造对象过程中需要使用的方法;
需要通过建造模式,构建对象的类,需要实施Builder接口,比如SonBuilderImp2,SonBuilderImp1;
Director类,通过成员变量builder,可以按照指定的一些特性,来构造复杂对象;
以一个肯德基点餐的例子进行说明:
有鸡腿、汉堡组成不同的套餐,套餐1包含鸡腿、汉堡,套餐2只包含鸡腿。
使用建造模式的设计思路,可以这样设计:
Build接口,包含鸡腿、汉堡两个方法;
套餐1,套餐2分别来实施Builder接口;
Director通过builder的调用,建造不同的套餐。
package com.learn.design.builder;
/**
* Created by liuyingzi on 2018/9/5.
* 公共接口,构造复杂对象需要使用到的方法
*/
public interface KFCBuilder {
public void jitui();
public void hanbao();
}
package com.learn.design.builder;
/**
* Created by liuyingzi on 2018/9/5.
*/
public class TaocanKFCBuilder1 implements KFCBuilder{
@Override
public void hanbao() {
System.out.println("汉堡:"+this.getClass());
}
@Override
public void jitui() {
System.out.println("鸡腿:"+this.getClass());
}
}
package com.learn.design.builder;
/**
* Created by liuyingzi on 2018/9/5.
*/
public class TaocanKFCBuilder2 implements KFCBuilder{
@Override
public void hanbao() {
System.out.println("汉堡:"+this.getClass());
}
@Override
public void jitui() {
System.out.println("鸡腿:"+this.getClass());
}
}
package com.learn.design.builder;
/**
* Created by liuyingzi on 2018/9/5.
*/
public class KFCDirector {
public KFCBuilder builder;
public TaocanKFCBuilder1 createModel1(){
TaocanKFCBuilder1 taocan1 = new TaocanKFCBuilder1();
builder = taocan1;
builder.hanbao();
builder.jitui();
return taocan1;
}
public TaocanKFCBuilder2 createModel2(){
TaocanKFCBuilder2 taocan2 = new TaocanKFCBuilder2();
builder = taocan2;
builder.hanbao();
// builder.jitui();
return taocan2;
}
}
package com.learn.design.builder;
/**
* Created by liuyingzi on 2018/9/5.
*/
public class MainTest {
/**
*
* @param args
*/
public static void main(String[] args){
KFCDirector director = new KFCDirector();
TaocanKFCBuilder1 modle1 = director.createModel1();
TaocanKFCBuilder2 modle2 = director.createModel2();
}
}