行为型设计模式之模板方法(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 }

 

上面例子中的事件没有全部写完的! 
 
 
 
 
 
 
 
相关文章
|
1天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
27天前
|
设计模式
设计模式-单一职责模式
设计模式-单一职责模式
|
27天前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
27天前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
1月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
1月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
1月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
2月前
|
设计模式 算法 Java
跟着GPT学设计模式之模板模式
模板模式是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤的具体实现延迟到子类中。该模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
44 6
|
1月前
|
设计模式 人工智能 达摩院
设计模式的基础问题之模板模式在软件开发中的优势是什么
设计模式的基础问题之模板模式在软件开发中的优势是什么
|
1月前
|
设计模式 项目管理
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决