说明
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色
代码实现
public abstract class Build {
public abstract void setCandy ( String size) ;
public abstract Candy construct ( ) ;
}
public class ChocolateBuild extends Build {
private Candy candy;
@Override
public void setCandy ( String size) {
candy = new ChocolateCandy ( ) ;
candy. setSize ( size) ;
}
@Override
public Candy construct ( ) {
this . candy. start ( ) ;
this . candy. putCandy ( ) ;
this . candy. putAdditive ( ) ;
this . candy. packCandy ( ) ;
this . candy. end ( ) ;
return candy;
}
}
public class Client {
private Build build;
public void setBuild ( Build build) {
this . build = build;
}
public Candy getSmallCandy ( ) {
build. setCandy ( "small" ) ;
return build. construct ( ) ;
}
}
public abstract class Candy {
private String size;
public String getSize ( ) {
return size;
}
public void setSize ( String size) {
this . size = size;
}
public void start ( ) {
System . out. println ( "做糖果开始,型号:" + this . size) ;
}
public abstract void putCandy ( ) ;
public abstract void putAdditive ( ) ;
public abstract void packCandy ( ) ;
public void end ( ) {
System . out. println ( "做糖果结束" ) ;
}
}
public class ChocolateCandy extends Candy {
@Override
public void putCandy ( ) {
System . out. println ( "巧克力糖果放糖" ) ;
}
@Override
public void putAdditive ( ) {
System . out. println ( "巧克力糖果放巧克力" ) ;
}
@Override
public void packCandy ( ) {
System . out. println ( "巧克力糖果打包" ) ;
}
}
public class test {
public static void main ( String [ ] args) {
Client client = new Client ( ) ;
ChocolateBuild chocolateBuild = new ChocolateBuild ( ) ;
client. setBuild ( chocolateBuild) ;
Candy candy = client. getSmallCandy ( ) ;
}
}