zoukankan      html  css  js  c++  java
  • 模板方法模式

    定义一个方法,安排算法的步骤,算法每一步的详细实现策略可以延迟到子类执行。

    可以在算法里定义hook,让客户选择性的改变算法的策略,而不需要本身算法的步骤。

     代码示例:

     1 package templmethod;
     2 
     3 abstract class Audi {
     4     
     5     protected boolean isWhistle;
     6     
     7     protected void start(){
     8         System.out.println("starting....");
     9     }
    10     
    11     protected void stop(){
    12         System.out.println("stopped....");
    13     }
    14     
    15     protected abstract void driveNormal();
    16     
    17     protected abstract void driveSlowly();
    18     
    19     protected void reverse(){
    20         setWhistle();
    21         if(isWhistle){
    22             System.out.println("倒车请注意...倒车请注意...");
    23             System.out.println("backing now....");
    24         }else{
    25             System.out.println("backing now....");
    26         }
    27     }
    28     
    29     public void setWhistle(){
    30         this.isWhistle = true;
    31     }
    32         
    33     
    34 }
    View Code
     1 package templmethod;
     2 
     3 public class AudiA4 extends Audi{
     4 
     5     @Override
     6     public void driveNormal() {
     7         System.out.println("A4 high-end driving normally....");
     8     }
     9 
    10     @Override
    11     public void driveSlowly() {
    12         System.out.println("A4 high-end driving slowly....");
    13     }
    14     
    15     @Override
    16     public void setWhistle() {
    17         isWhistle =  false;
    18     }
    19 
    20 
    21 }
    View Code
     1 package templmethod;
     2 
     3 public class AudiC5 extends Audi {
     4 
     5     @Override
     6     public void driveNormal() {
     7         System.out.println("C5 stdeady driving normally....");
     8     }
     9 
    10     @Override
    11     public void driveSlowly() {
    12         System.out.println("C5 stdeady driving slowly....");
    13     }
    14     
    15     @Override
    16     public void setWhistle() {
    17         isWhistle = true;
    18     }
    19 
    20 }
    View Code
     1 package templmethod;
     2 
     3 public class Driver {
     4     private Audi myCar;
     5     
     6     /*传说中的定义算法的方法,具体的步骤由它规定,任何人都不可以改变;
     7      * 但是每一步是可以通过子类的延迟实现,来定义的
     8      */
     9     public void driveCar(){
    10         myCar.start();
    11         myCar.driveNormal();
    12         System.out.println("GPS提示:前方90度急转弯....");
    13         myCar.driveSlowly();
    14         System.out.println("GPS提示:前方无路可走....");
    15         myCar.reverse();
    16     }
    17     
    18     public void stopCar(){
    19         myCar.stop();
    20     }
    21     
    22     public void buyCar(Audi audi){
    23         this.myCar = audi;
    24     }
    25 }
    View Code
     1 package templmethod;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         Driver driver = new Driver();
     6         driver.buyCar(new AudiA4());
     7         driver.driveCar();
     8         
     9         System.out.println("--------------------------------------");
    10         
    11         driver.buyCar(new AudiC5());
    12         driver.driveCar();
    13         
    14     }
    15 }
    View Code

    输出结果:

    starting....
    A4 high-end driving normally....
    GPS提示:前方90度急转弯....
    A4 high-end driving slowly....
    GPS提示:前方无路可走....
    backing now....
    --------------------------------------
    starting....
    C5 stdeady driving normally....
    GPS提示:前方90度急转弯....
    C5 stdeady driving slowly....
    GPS提示:前方无路可走....
    倒车请注意...倒车请注意...
    backing now....
    

      

  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/tisakong/p/4699214.html
Copyright © 2011-2022 走看看