建造者模式,在笔者看来比较试用于,定制一个业务流程,而流程的细节又不尽相同,每个细节又必不可少,这时应考虑使用建造者模式。
大话设计模式-类图
先看下笔者写的一个简单的例子。
/** * 所有建造过程不同的方法均定义在接口里 */ public interface IMakePerson { public void makeHead(); public void makeBody(); public void makeHandle(); public void makeLeg(); public Person getResult(); }
/** * 产品 */ public class Person { List<String> personParts = new ArrayList<>(); public void add(String part) { personParts.add(part); } public void show() { for (String part : personParts) { System.out.print(part); } } }
/** * 指挥官,指挥具体创建小人的过程 */ public class Director { public Person createPerson(IMakePerson makePerson) { makePerson.makeHead(); makePerson.makeBody(); makePerson.makeHandle(); makePerson.makeLeg(); return makePerson.getResult(); } }
/** * 实现创建小人接口的具体创建小人类 */ public class FatPerson implements IMakePerson{ private Person person = new Person(); @Override public void makeHead() { person.add("头 "); } @Override public void makeBody() { person.add("胖身体 "); } @Override public void makeHandle() { person.add("手 "); } @Override public void makeLeg() { person.add("腿 "); } @Override public Person getResult() { return person; } }
/** * 实现创建小人接口的具体创建小人类 */ public class ThinPerson implements IMakePerson{ private Person person = new Person(); @Override public void makeHead() { person.add("头 "); } @Override public void makeBody() { person.add("瘦身体 "); } @Override public void makeHandle() { person.add("手 "); } @Override public void makeLeg() { person.add("腿 "); } @Override public Person getResult() { return person; } }
/** * 客户端 */ public class Test { public static void main(String[] args) { IMakePerson thinPerson = new ThinPerson(); Director director = new Director(); Person thinperson = director.createPerson(thinPerson); thinperson.show(); System.out.println(" ---------------------------------------------"); IMakePerson FatPerson = new FatPerson(); Person fatperson = director.createPerson(FatPerson); fatperson.show(); } }
运行结果如下:
头 瘦身体 手 腿 --------------------------------------------- 头 胖身体 手 腿
可以看出如果我们继续创建不同的小人,我们只需要在写一个小人类实现接口就可以了,这样我们可以稳定的创建小人,而不会造出残疾人。
实际工作中,很多流程都不尽相同,只是细节有区别,此时我们应采用建造者模式,来为不同的客户创建不同的稳定流程。
以上是笔者对建造者的理解,希望能帮助学习的小伙伴!