模板方法(Template Method)設計模式:算法
㈠意圖:設計模式
司馬遷很早就用到了設計模式;哈哈.且看:人固有一死,或重於泰山;或輕於鴻毛.ide
也就是說:人的一輩子所要的所歷的階段已經訂下來了;出生-->成長-->成年-->變老--->Over! 可是每一個人在個個不一樣的階段所經歷的是不同的;有的比重比泰山(該減肥了);有的輕於鴻毛(減肥也不能成這樣啊!).這就是一個典型的模板方法設計模式;設計
定義一個操做中的算法的骨架,而將一些步驟遲延到子類中.TemplateMethod使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟.它屬於類行爲型模式it
-- GOF設計模式;模板
㈡類圖:class
㈢角色介紹:擴展
AbstactClass:抽象類(模板類)角色.它定義了算法的骨架;和各個算法簽名;方法
ConcreteClass:具體類角色.它實現了一個或多個特定的算法步驟;im
㈣應用:
一次性實現一個算法的不變部分,並將可變的行爲留給子類來實現
各子類中公共的行爲應被提取出來並集中到一個公共父類中以免代碼重複
控制子類擴展.
㈤代碼應用:
/**
*
*/
package com.skywares.designpattern.templatemethod;
/**
* @author Administrator
*
*/
public abstract class Person
{
/**
* God defined ahaha!
*/
public final void leftRoad()
{
warBorn();
growUp();
adult();
age();
over();
}
public abstract void warBorn();
public abstract void growUp();
public abstract void adult();
public abstract void age();
public abstract void over();
}
/**
*
*/
package com.skywares.designpattern.templatemethod;
/**
* @author Administrator
*
*/
public class FatPerson extends Person
{
@Override
public void warBorn()
{
System.out.println("I'm not a pat begining! ");
}
@Override
public void growUp()
{
System.out.println("eat too much ! ");
}
@Override
public void adult()
{
System.out.println(" taishan ahhaha ! ");
}
@Override
public void age()
{
System.out.println(" I can't move too fat ! ");
}
@Override
public void over()
{
System.out.println(" over ! ");
}
}
/**
*
*/
package com.skywares.designpattern.templatemethod;
/**
* @author Administrator
*
*/
public class ThinPerson extends Person
{
@Override
public void warBorn()
{
System.out.println(" not a thin init ! ");
}
@Override
public void growUp()
{
System.out.println(" yingyang bu liang ! ");
}
@Override
public void adult()
{
System.out.println("fly ..... like a bird ");
}
@Override
public void age()
{
System.out.println("older.... ");
}
@Override
public void over()
{
System.out.println(" next i will be a fat!! .... ");
}
}
/** * */ package com.skywares.designpattern.templatemethod; /** * @author Administrator * */ public class Client { /** * @param args */ public static void main(String[] args) { Person fatPerson = new FatPerson(); fatPerson.leftRoad(); Person thinPerson = new FatPerson(); thinPerson.leftRoad(); } }