1 模板方法(TEMPLATE METHOD)模式:

模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类。子类通过继承这个抽象基类去实现各个步聚的抽象方法,而工作流程却由父类来控制。 
2 模板方法应用于下列情况:
 1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
 2)各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
3 结构图:
抽象类:定义抽象的原语操作,具体的子类将重定义它们以实现一个算法, 实现一个模板方法,定义一个算法的骨架。
具体类:实现原语操作以完成算法中与特定子类相关的步骤。
4 同样举个例子:
抽象类:

 public abstract  class Car {

     public abstract void makeHead();

     public abstract void makeBody();

     public void makeCar(){
this.makeHead();
this.makeBody();
} }

具体类:

 public class Bus  extends  Car {

     @Override
public void makeHead() { System.out.println("产生bus车头"); } @Override
public void makeBody() { System.out.println("产生bus车身"); } }

测试:

 public class Test {

     public static void main(String[] args) {

         Car car = new Jeep();
car.makeCar(); } }
这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。
 
 二:策略(Strategy )模式
 
 1 策略(Strategy )模式:

在业务当中常常出现一个问题有一组算法,在不同的情况下我们有可能使用不同的算法。我们需要找到一种灵活简便的设计方式:将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
 2结构图:
3 举个例子:
常见的购物问题:
  向客户报价,对于销售部门的人来讲,这是一个非常复杂的问题,对不同的客户要报不同的价格,比如:
–对普通客户或者是新客户报的是全价;
–对老客户报的价格,根据客户年限,给予一定的折扣;
–对大客户报的价格,根据大客户的累计消费金额,给予一定的折扣;
–还要考虑客户购买的数量和金额,比如:虽然是新用户,但是一次购买的数量非常大,或者是总金额非常高,也会有一定的折扣;
–还有,报价人员的职务高低,也决定了他是否有权限对价格进行一定的浮动折扣;
总之,向客户报价是非常复杂的
java代码:
 package ooad.design.Strategy;
/**
* 报价接口
* @author hellokitty燕
*
*/
public interface Quoteprice {
public double quoteprice(double price);
}
 package ooad.design.Strategy;

 public class Content {
private Quoteprice quoteprice; public Content(Quoteprice quoteprice) {
super();
this.quoteprice = quoteprice;
}
/**
* 折扣
* @param price
* @return
*/
public double discounting(double price){
return quoteprice.quoteprice(price); } }
 package ooad.design.Strategy;
/**
* 新用户
* @author hellokitty燕
*
*/
public class NewUser implements Quoteprice{ @Override
public double quoteprice(double price) {
if(price>10000){
return price*0.95;
} return price;
} }

测试类:

 package ooad.design.Strategy;

 public class Test {

     public static void main(String[] args) {
Quoteprice q=new NewUser();
Content c=new Content(q);
double ne= q.quoteprice(20000);
System.out.println(ne);
} }
上面例子中的事件没有全部写完的! 
 
 
 
 
 
 
 

行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式的更多相关文章

  1. 行为型设计模式之模板方法(Template Method)

    结构 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Te m p l a t e M e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 适用性 一次性 ...

  2. 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...

  3. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  4. 设计模式之---模板方法template method的使用

    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template Method ...

  5. 设计模式之模板方法(Template Method)

    在整理模板方法之前,先来说点废话吧.除了记录学习总结,也来记录一下生活吧. 我们公司的老板在北京,老板也会因为项目来公司,不过不是天天来.公司有个同事,只要老板不在就天天迟到,而且一天比一天晚,经常来 ...

  6. 设计模式六: 模板方法(Template Method)

    简介 模板方法属于行为型模式的一种. 实现层面上, 在抽象类中定义了算法或流程的骨架, 将其中易变的部分延迟到子类实现, 也就是允许它的子类实现其中的某些步骤. 模板方法适用于算法不变, 但算法中某些 ...

  7. Java设计模式之 — 模板方法(Template Method)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...

  8. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  9. Template Method模式和Strategy模式有何异同

    Template Method模式和Strategy模式有何异同 博客分类: 设计模式 Java  Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类 ...

随机推荐

  1. 在Echarts 柱形图的单击事件中写入自定义的参数

    标签: 逻辑:(点击柱形图的某个实例(注意:三个柱子表示的是一个实例)) 参考链接:http://echarts.baidu.com/doc/example/event.html { name: ‘c ...

  2. [ 9.11 ]CF每日一题系列—— 441C暴力模拟

    Description: n * m 的地图,建设k个管道管道只能横竖走,且长度大于等于2,问你任意一种建设方法 Solution: 图里没有障碍,所以先把前k - 1个管道每个分2个长度,最后一个管 ...

  3. 1、K-means

    k-means(K均值) 1.无监督聚类算法 2.K---分成K类 3.分类准则:使得样本与各类中心之间的误差平方和最小 --------------------------------------- ...

  4. FastReport使用技巧

    使用技巧篇 1.FastReport中如果访问报表中的对象?       可以使用FindObject方法.      TfrxMemoView(frxReport1.FindObject('memo ...

  5. mysql 幻象读

    [sql] view plain copy CREATE TABLE `t100` ( `id` bigint(20) NOT NULL default '0', `value` varchar(32 ...

  6. [leed code 179] Largest Number

    1 题目 Given a list of non negative integers, arrange them such that they form the largest number. For ...

  7. NET 获取实例所表示的日期是星期几

    获取日期枚举,可以根据switch去进行操作 DateTime.Now.DayOfWeek

  8. SQL2014 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    管理员身份运行 cmd ->  输入 netsh winsock reset

  9. ssh远程连接不上linux

    远程连接工具是:Xmanager Enterprise 5-->Xshell linux 发行版本是:CentOS-6.3-x86_64 问题:ssh一直都可以远程连接上linux,一段时间后突 ...

  10. Swift5 语言参考(十) 语法汇总

    词法结构 GRAMMAR OF WHITESPACE whitespace → whitespace-item whitespace opt whitespace-item → line-break ...