建造者模式:是将一个复杂的对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。java
工厂类模式提供的是建立单个类的模式,而建造者模式则是将各类产品集中起来进行管理,用来建立复合对象,所谓复合对象就是指某个类具备不一样的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来获得的。算法
建造者模式一般包括下面几个角色:数组
使用场景:ide
与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。测试
public class Person { private String head; private String body; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
public interface PersonBuilder { void builderHead(); void builderBody(); void builderFoot(); Person BuilderPersion(); //组装 }
public class ManBuilder implements PersonBuilder { private Person person; public ManBuilder() { person = new Person();//建立一个Person实例,用于调用set方法 } public void builderHead() { person.setHead("建造者头部分"); } public void builderBody() { person.setBody("建造者身体部分"); } public void builderFoot() { person.setFoot("建造者头四肢部分"); } public Person BuilderPersion() { return person; } }
public class PersonDirector { public Person constructPerson(PersonBuilder pb) { pb.builderHead(); pb.builderBody(); pb.builderFoot(); return pb.BuilderPersion(); } public static void main(String[] args) { PersonDirector pb = new PersonDirector(); Person person = pb.constructPerson(new ManBuilder()); System.out.println(person.getHead()); System.out.println(person.getBody()); System.out.println(person.getFoot()); } }
定义一个操做中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构便可重定义该算法的ui
重复代码所有在父类里面,不一样业务的,抽取给子类进行实现。抽取过程---抽象方法。this
某些特定步骤。lua
核心:处理某个流程的代码已经都具有,可是其中某个节点的代码暂时不能肯定。所以,咱们采用工厂方法模式,将这个节点的代码实现转移给 子类完成。即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。code
说白了,就是将一些相同操做的代码,封装成一个算法的骨架。核心的部分留在子类中操做,在父类中只把那些骨架作好。 例如: 例如:对象
这里办理业务是属于子类来完成的,其余的取号,排队,评分则是一个模板。
这里使用银行办理业务为例
//模板方法 public abstract class BankTemplateMethod { // 1.取号排队 public void takeNumber() { System.out.println("取号排队。。"); } // 2.每一个子类不一样的业务实现,由各自子类实现. abstract void transact(); // 3.评价 public void evaluate() { System.out.println("反馈评价.."); } public void process(){ takeNumber(); transact(); evaluate(); } }
public class DrawMoney extends BankTemplateMethod { @Override void transact() { System.out.println("我要取款"); } }
public class Client { public static void main(String[] args) { BankTemplateMethod bankTemplate=new DrawMoney(); bankTemplate.process(); } }
BankTemplateMethod bankTemplateMethod=new BankTemplateMethod() { @Override void transact() { System.out.println("我要存钱."); } }; bankTemplateMethod.process();
我的博客 蜗牛