行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

简介: 1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类。子类通过继承这个抽象基类去实现各个步聚的抽象方法,而工作流程却由父类来控制。

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

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

 具体类:

 1 public class Bus  extends  Car {
 2 
 3     @Override
 4     public void makeHead() {
 5     
 6          System.out.println("产生bus车头");
 7                 
 8     }
 9 
10     @Override
11     public void makeBody() {
12         
13          System.out.println("产生bus车身");
14         
15     }
16 
17 }

 

测试:

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

 

 1 package ooad.design.Strategy;
 2 
 3 public class Content {
 4     private Quoteprice quoteprice;
 5 
 6     public Content(Quoteprice quoteprice) {
 7         super();
 8         this.quoteprice = quoteprice;
 9     }
10     /**
11      * 折扣
12      * @param price
13      * @return
14      */
15     public double discounting(double price){
16         return quoteprice.quoteprice(price);
17         
18     }
19 
20 }

 

 
 1 package ooad.design.Strategy;
 2 /**
 3  * 新用户
 4  * @author hellokitty燕
 5  *
 6  */
 7 public class NewUser implements Quoteprice{
 8 
 9     @Override
10     public double quoteprice(double price) {
11         if(price>10000){
12             return price*0.95;
13         }
14         
15         return price;
16     }
17 
18 }

 测试类:

 1 package ooad.design.Strategy;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         Quoteprice q=new NewUser();
 7         Content c=new Content(q);
 8        double ne= q.quoteprice(20000);
 9        System.out.println(ne);
10     }
11 
12 }

 

上面例子中的事件没有全部写完的! 
 
 
 
 
 
 
 
相关文章
|
15天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
19 0
|
29天前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
59 0
|
11天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
16天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1天前
|
设计模式
设计模式(一)简单工厂模式
设计模式(一)简单工厂模式
4 0
|
11天前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
16天前
|
设计模式 缓存 安全
分析设计模式对Java应用性能的影响,并提供优化策略
【4月更文挑战第7天】本文分析了7种常见设计模式对Java应用性能的影响及优化策略:单例模式可采用双重检查锁定、枚举实现或对象池优化;工厂方法和抽象工厂模式可通过对象池和缓存减少对象创建开销;建造者模式应减少构建步骤,简化复杂对象;原型模式优化克隆方法或使用序列化提高复制效率;适配器模式尽量减少使用,或合并多个适配器;观察者模式限制观察者数量并使用异步通知。设计模式需根据应用场景谨慎选用,兼顾代码质量和性能。
|
29天前
|
设计模式 编解码 算法
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(三)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
28 0
|
1月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
3月前
|
设计模式 存储 算法
Java 设计模式最佳实践:三、行为模式
Java 设计模式最佳实践:三、行为模式
22 0