模板方法模式(Template Method) 定義一個操做中算法的骨架,而將一些步驟延遲到子類中。模板方法能夠不改變一個算法的結構便可從新定義該算法的某些特定步驟。
java
類型:形爲型模式 git
順口溜:中訪策備迭 觀模命狀職解github
package com.amosli.dp.behavior.template; public abstract class AbstractClass { public void templateMethod(){ primitiveMethod1(); primitiveMethod2(); } public abstract void primitiveMethod1(); public abstract void primitiveMethod2(); } package com.amosli.dp.behavior.template; public class ConcreteClassA extends AbstractClass{ @Override public void primitiveMethod1() { System.out.println("ConcreteClassA primitive method 1..."); } @Override public void primitiveMethod2() { System.out.println("ConcreteClassA primitive method 2..."); } } package com.amosli.dp.behavior.template; public class ConcreteClassB extends AbstractClass{ @Override public void primitiveMethod1() { System.out.println("ConcreteClassB primitive method 1..."); } @Override public void primitiveMethod2() { System.out.println("ConcreteClassB primitive method 2..."); } } package com.amosli.dp.behavior.template; public class Client { public static void main(String[] args) { AbstractClass abstractClass = new ConcreteClassA(); abstractClass.templateMethod(); abstractClass = new ConcreteClassB(); abstractClass.templateMethod(); } }
當不變和可變的行爲在方法的子類中混合在一塊兒時,不變的行爲就會在子類中重複出現。咱們能夠經過模板方法模式將這些行爲搬移到單一的地方,這樣就幫助子類擺脫重複的不變行爲的糾結。算法
模板方法所不變的行爲搬到超類,去除子類中的重複代碼,提供了一個很好了代碼複用平臺;ide
將不變行爲集成到超類中,當類的行爲比較複雜時,對於超類的管理和擴展將會愈來愈複雜,因此使用模板方法模式時,切記對於不對的類分配不一樣的職責(SRP)。
spa
本系列文章源碼地址,https://github.com/amosli/dp 歡迎Fork & Star !!code