建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示
我们可能会需要创建不同的对象,但这些对象的**创建步骤都是一样的,只是每一步的具体细节不同。**这个时候我们就可以使用建造者模式来进行设计。
我们生活中也经常碰到建造者模式,比如肯德基的汉堡,虽然种类很多,但是制作的步骤基本都是一致的,只是具体的细节不同。这样就不会出现由于疏忽而导致缺少某些必要环节。这也是标准化生产的好处之一。
建造者模式是在当创建复杂对象的算法应当独立于该对象组成部分以及它们的装配方式时适用的模式。它主要用于创建一些复杂对象,内部构造顺序是稳定的,但具体的构造却有复杂的变化。
下面我们来写demo,是一个画小人的程序。
首先我们需要一个抽象类Person,它规定了画小人需要哪些步骤
public abstract class Person {
public abstract void drawHead();
public abstract void drawBody();
public abstract void drawLeftHand();
public abstract void drawRightHand();
public abstract void drawLeftLeg();
public abstract void drawRightLeg();
}
然后我们需要两个具体的实现类,一个胖小人和一个瘦小人
public class FatPerson extends Person{
@Override
public void drawHead(){
System.out.println("画一个胖脸");
}
@Override
public void drawBody(){
System.out.println("画一个大肚子");
}
@Override
public void drawLeftHand(){
System.out.println("画一个左手");
}
@Override
public void drawRightHand(){
System.out.println("画一个右手");
}
@Override
public void drawLeftLeg(){
System.out.println("画一个粗左腿");
}
@Override
public void drawRightLeg(){
System.out.println("画一个粗右腿");
}
}
public class ThinPerson extends Person{
@Override
public void drawHead(){
System.out.println("画一个瘦脸");
}
@Override
public void drawBody(){
System.out.println("画一个小肚子");
}
@Override
public void drawLeftHand(){
System.out.println("画一个左手");
}
@Override
public void drawRightHand(){
System.out.println("画一个右手");
}
@Override
public void drawLeftLeg(){
System.out.println("画一个细左腿");
}
@Override
public void drawRightLeg(){
System.out.println("画一个细右腿");
}
}
接着我们还需要一个指挥者类,这个类用来控制创建过程,也用它来隔离用户与创建过程的关系
public class PersonDirector{
private Person person;
private PersonDirector(Person person){
this.person = person;
}
public void createPerson(){
person.drawHead();
person.drawBody();
person.drawLeftHand();
person.drawRightHand();
person.drawLeftLeg();
person.drawRightLeg();
}
}
这样,客户端在调用时,就可以这样去做
PersonDirector pd = new PersonDirector(new FatPerson());
pd.createPerson();
相关demo可以参考我的gitee仓库
https://gitee.com/akitsuki-kouzou/DesignPatternDemo
建造者模式详解
1604

被折叠的 条评论
为什么被折叠?



