定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤

应用场景:

A.操作步骤稳定,而具体细节延迟到子类.

UML:

示例代码:

所有的商品类在用户购买前,都需要给用户显示出最终支付的费用.但有些商品需要纳税,有些商品可能有打折.

abstract class Product
{
protected $payPrice = 0; public final function setAdjustment()
{
$this->payPrice += $this->discount();
$this->payPrice += $this->tax();
} public function getPayPrice()
{
return $this->payPrice;
} protected function discount()
{
return 0;
} abstract protected function tax();
} class CD extends Product
{
public function __construct($price)
{
$this->payPrice = $price;
} protected function tax()
{
return 0;
}
} class IPhone extends Product
{
public function __construct($price)
{
$this->payPrice = $price;
} protected function tax()
{
return $this->payPrice * 0.2;
} protected function discount()
{
return -10;
} } $cd = new CD(15);
$cd->setAdjustment();
echo $cd->getPayPrice(); $iphone = new IPhone(6000);
$iphone->setAdjustment();
echo $iphone->getPayPrice();

  

ps:一般为防止模板下属类修改模板,模板方法都会加上final

B1:模板方法模式 TemplateMethod的更多相关文章

  1. 20模板方法模式TemplateMethod

    一.什么是模板方法模式 Template Method模式也叫模板方法模式,是 行为模式之一,它把具有特定步骤算法中的某些 必要的处理委让给抽象方法,通过子类继承对抽 象方法的不同实现改变整个算法的行 ...

  2. 设计模式——模板方法模式(TemplateMethod Pattern)

    模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. UML图: 抽象模板: package com.cnblo ...

  3. 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现

    1. 模板方法模式: 定义一个操作中的算法骨架,而将一些操作延迟到子类, 模板方法模式使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤. 当不变和可变的行为在方法的子类实现中混在一起的 ...

  4. 模板方法模式TemplateMethod

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11407071.html 1. 定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子 ...

  5. 模板方法模式-TemplateMethod

    模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的机构即可以重定义算法的某些特定步骤. 模板方法模式是通过吧不变形为搬移到超类,去除子类中的重复代码 ...

  6. 设计模式之模板方法模式 templateMethod

    代码实现 public abstract class BankTemplateMethod { //具体方法 public void takeNumber(){ System.out.println( ...

  7. C++设计模式-TemplateMethod模板方法模式

    Template模板方法模式作用:定义一个操作中的算法的骨架.而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 其关键是将通用算法(逻辑)封装在抽象基 ...

  8. java设计模式(9):模板方法模式(TemplateMethod)

    一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 二,类图: 三,通过小例子讲解: 这个模式一般用在 ...

  9. 设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

    一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. ...

随机推荐

  1. TimeUnit 笔记

    TimeUnit笔记 1.TimeUnit 简介 TimeUnit是java.util.concurrent包下的一个枚举类,其主要封装了时间单位之间的转换以及基于时间上对线程的基本操作(sleep, ...

  2. java.lang.NumberFormatException: multiple points 异常

    平时使用SimpleDateFormat的时候都是在单线程的情况下使用的,今天在改写别人的代码,发现每个类中都会写大量的SimpleDateFormat实例.作为一个程序特有的洁癖开始对代码进行优化. ...

  3. AC日记——Red and Blue Balls codeforces 399b

    399B - Red and Blue Balls 思路: 惊讶的发现,所有的蓝球的消除都是独立的: 对于在栈中深度为i的蓝球消除需要2^i次操作: 代码: #include <cstdio&g ...

  4. 只用120行Java代码写一个自己的区块链-3挖矿算法

    在本系列前两篇文章中,我们向大家展示了如何通过精炼的Java代码实现一个简单的区块链.包括生成块,验证块数据,广播通信等等,这一篇让我们聚焦在如何实现 PoW算法. 大家都无不惊呼比特币.以太坊及其他 ...

  5. [scrapy] PIL老是出错,换成pillow解决问题

    使用scrapy下载图片的时候,用PIL老是下载不成功 出现如下错误: IOError: encoder jpeg not available 据说是安装PIL之前缺少一些相关的包 freetype ...

  6. UVA 10341.Solve It-二分查找

    二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序 ...

  7. CodeForces 348C Subset Sums(分块)(nsqrtn)

    C. Subset Sums time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...

  8. Fruit Feast(暴力)(动态规划)

    Fruit Feast 时间限制: 1 Sec  内存限制: 64 MB提交: 64  解决: 18[提交][状态][讨论版] 题目描述 Bessie has broken into Farmer J ...

  9. 【函数式权值分块】【分块】bzoj3196 Tyvj 1730 二逼平衡树

    #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...

  10. 【函数式权值分块】【分块】bzoj1901 Zju2112 Dynamic Rankings

    论某O(n*sqrt(n))的带修改区间k大值算法. 首先对序列分块,分成sqrt(n)块. 然后对权值分块,共维护sqrt(n)个权值分块,对于权值分块T[i],存储了序列分块的前i块的权值情况. ...