您的位置:首页 > 其它

Design Pattern学习笔记 --- 模板方法(Template Method)模式

2012-06-24 23:54 567 查看
模板方法(Template Method)设计模式:

㈠意图:

司马迁很早就用到了设计模式;哈哈.且看:人固有一死,或重于泰山;或轻于鸿毛.

也就是说:人的一生所要的所历的阶段已经订下来了;出生-->成长-->成年-->变老--->Over! 但是每个人在个个不同的阶段所经历的是不一样的;有的比重比泰山(该减肥了);有的轻于鸿毛(减肥也不能成这样啊!).这就是一个典型的模板方法设计模式;

定义一个操作中的算法的骨架,而将一些步骤迟延到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.它属于类行为型模式

-- GOF设计模式;

㈡类图:



㈢角色介绍:

AbstactClass:抽象类(模板类)角色.它定义了算法的骨架;和各个算法签名;

ConcreteClass:具体类角色.它实现了一个或多个特定的算法步骤;

㈣应用:

一次性实现一个算法的不变部分,并将可变的行为留给子类来实现

各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复

控制子类扩展.

㈤代码应用:

/**

*

*/

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();

}

}

本文出自 “hubert_guo” 博客,请务必保留此出处http://hubertguo.blog.51cto.com/2358769/908103
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐