建造者模式
github:
【 https://github.com/cstriker1407/design_pattern 】
CONTENTS [hide]
1)将要制造的元素抽象出来,并将公用的业务封装在抽象类中。
/*
* 父类设计成抽象类,供子类来继承。 |
*/ |
abstract class CarModel |
{ |
private boolean bIsAlarm = false ; |
|
/* start stop alarm 对外部调用者来讲不可见,可以设计为protected */ |
protected abstract void start(); |
protected abstract void stop(); |
protected abstract void alarm(); |
/* run 设置为final,可以将业务固化,防止子类重写 */ |
public final void run() |
{ |
start(); |
if (isAlarm()) |
{ |
alarm(); |
} |
stop(); |
} |
/* 所谓的钩子方法,子类可以实现,这样可以实现业务的可定制性。 */ |
private boolean isAlarm() |
{ |
return bIsAlarm; |
} |
public final void setAlarm( boolean isAlarm) |
{ |
this .bIsAlarm = isAlarm; |
} |
} |
2)分别实例化两个具体的元素。
class ACar extends CarModel |
{ |
@Override |
protected void start() |
{ |
System.out.println( "A Car Start" ); |
} |
@Override |
protected void stop() |
{ |
System.out.println( "A Car Stop" ); |
} |
@Override |
protected void alarm() |
{ |
System.out.println( "A Car Alarm" ); |
} |
} |
class BCar extends CarModel |
{ |
@Override |
protected void start() |
{ |
System.out.println( "B Car Start" ); |
} |
@Override |
protected void stop() |
{ |
System.out.println( "B Car Stop" ); |
} |
@Override |
protected void alarm() |
{ |
System.out.println( "B Car Alarm" ); |
} |
} |
3)为了方便制造,将制造类也抽象出来,屏蔽掉上层对元素的联系。
abstract class CarBuilder |
{ |
public abstract void setAlarm( boolean isAlarm); |
public abstract CarModel getCar(); |
} |
class ACarBuilder extends CarBuilder |
{ |
private ACar aCar = new ACar(); |
@Override |
public void setAlarm( boolean isAlarm) |
{ |
aCar.setAlarm(isAlarm); |
} |
@Override |
public CarModel getCar() |
{ |
return aCar; |
} |
} |
class BCarBuilder extends CarBuilder |
{ |
private BCar bCar = new BCar(); |
@Override |
public void setAlarm( boolean isAlarm) |
{ |
bCar.setAlarm(isAlarm); |
} |
@Override |
public CarModel getCar() |
{ |
return bCar; |
} |
} |
4)制造的控制类和测试代码。
class BuilderDirector |
{ |
private ACarBuilder aCarBuilder = new ACarBuilder(); |
private BCarBuilder bCarBuilder = new BCarBuilder(); |
|
public ACar getACar() |
{ |
aCarBuilder.setAlarm( true ); |
return (ACar) aCarBuilder.getCar(); |
} |
|
public BCar getBCar() |
{ |
bCarBuilder.setAlarm( false ); |
return (BCar) bCarBuilder.getCar(); |
} |
} |
public class BuilderTest |
{ |
public static void test() |
{ |
BuilderDirector builderDirector = new BuilderDirector(); |
builderDirector.getACar().run(); |
builderDirector.getBCar().run(); |
} |
} |
备注:
1)上述代码部分来自《 设计模式之禅 》
2)建造者的定义省略,后面可能会补齐。
发表评论