模板方法(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(); } }