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

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

}

 

 

你可能感兴趣的:(templateMethod)