zoukankan      html  css  js  c++  java
  • 设计模式(三)__模板方法设计模式

    咳咳,上课。  

    起立。

    老师再见。???

    你们就这么希望老师走吗。。。。

    好了,同学们,今天这节课给大家介绍一下设计模式的一种——模板方法设计模式。

      那么什么是模板方法设计模式呢?

      当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。

      模板方法模式是基于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心。

      模式中的角色:

      ①抽象类:实现了模板方法

      ②具体类:实现抽象类中的抽象方法

      通过一个例子来让大家更容易理解。

      当我们需要判断一段程序运行的时间的时候,程序如下:

     1 class GetTime {
     2     public void getTime() {
     3         long start = System.currentTimeMillis();
     4         // 判断这个循环执行的时间
     5         for (int y = 0; y < 1000; y++) {
     6             System.out.println(y);
     7         }
     8         long end = System.currentTimeMillis();
     9         System.out.println("毫秒是:" + (end - start));
    10     }
    11 }

      可是,如果需要判断的那段程序不确定怎么办呢?

      这时可以把那段程序抽取成一个方法,需要判断哪个程序,只需要修改这个方法即可。这种方式不好,当需求变更时,就需要修改这个类中的方法,违背了开闭原则,增加了开发成本,并且很容易出错。

      那么我们可以把这个不确定的功能部分提取出来,通过抽象方法实现,当你需要判断哪段程序的时候,可以通过子类去复写实现。这样做把不变的功能移到超类,通过子类扩展新的功能,有助于扩展,修改,符合开闭原则。

    代码如下:

     1 abstract class GetTime {
     2     public final void getTime() { // 此功能如果不需要复写,可加final限定
     3         long start = System.currentTimeMillis();
     4         code(); // 不确定的功能部分,提取出来,通过抽象方法实现
     5         long end = System.currentTimeMillis();
     6         System.out.println("毫秒是:" + (end - start));
     7     }
     8 
     9     public abstract void code(); // 抽象不确定的功能,让子类复写实现
    10 }
    11 
    12 class Demo extends GetTime {
    13     public void code() { // 子类复写功能方法
    14         for (int y = 0; y < 1000; y++) {
    15             System.out.println("y");
    16         }
    17     }
    18 }

    这样做也是有缺点的,每个不同的实现都需要定义一个子类,这会导致类的个数的增加。

    希望大家下去可以自行练习,把各种模式变成自己的习惯。

    咳咳,下课

    起立

    老师再见

  • 相关阅读:
    as3 绕中心点旋转
    TweenMax
    As3支持的Html标签一览
    AS3.0 静音和停止所有声音
    as3 如何判断同时按下两个键
    前置窗体
    系统音效控制
    LocalConnection
    as3代码实现调用摄像头
    air 加载网页
  • 原文地址:https://www.cnblogs.com/makaruila/p/4852371.html
Copyright © 2011-2022 走看看