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
㈠意图:
司马迁很早就用到了设计模式;哈哈.且看:人固有一死,或重于泰山;或轻于鸿毛.
也就是说:人的一生所要的所历的阶段已经订下来了;出生-->成长-->成年-->变老--->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
相关文章推荐
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 【设计模式】学习笔记11:模板方法(Template Method)
- 模板方法模式(Template Method Pattern)学习笔记
- 设计模式学习笔记(十六)——Template Method模板方法模式
- C#面向对象设计模式纵横谈 学习笔记14 Template Method模板方法(行为型模式)
- 设计模式学习笔记--模板方法(Template Method)模式
- 设计模式学习笔记——Template Method模板方法模式
- 设计模式学习笔记——Template Method模板方法模式
- 【设计模式】学习笔记11:模板方法(Template Method)
- 【设计模式学习笔记二十四】【行为模式】【模板方法(Template Method)】
- Design Pattern学习笔记之模板方法模式(the Template Method Pattern)
- 设计模式学习笔记(七)之模板方法模式(Template Method)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式学习笔记(三):模板方法模式【Template Method】(二) 问题解决