zoukankan      html  css  js  c++  java
  • JAVA模板方法设计模式(从现实生活角度理解代码原理)

    概述:

    定义一个功能的框架(骨架),一部分功能是确定的,一部分功能是不确定的,先把确定的部分实现,把不确定的部分延迟到子类中实现。

    实现该模式的关键步骤:

    第一步:抽象类,实现模板方法,定义功能(确定的以及不确定的)的框架。

    第二步:具体类,实现抽象类中的抽象方法,已完成完整的功能。

    老规矩,最近想整一台BMW1系,去了趟4S店,店里恰好有一台现车,但颜色我不太喜欢,这时服务顾问上来解释说:“先生,您看中的这台车就这一个型号,外观,发动机,内饰等配置都是一样的,但颜色是可以个性化定制的,所以这个您不用担心”。这里大家该明白了,这就是一个典型的模板方法了,确定的功能是发动机,外观,内饰等,不确定的就是颜色了。那我们就开始代码实现了,毕竟作为程序员,只有敲好了代码才买得起宝马啊大哭

    第一步:抽象类,定义功能框架

     1 abstract class BuyCar{
     2     public void buy(){
     3         //确定的功能
     4         System.out.println("欢迎来到宝马4S店,我给你介绍下你选的这款车");
     5         System.out.println("外观:两厢,家族式双肾栅格,典型的宝马脸");
     6         System.out.println("发动机:2.0L双涡管单涡轮增压发动机");
     7         System.out.println("内饰:。。。。。。。。");
     8         System.out.println("这款车整体请看就是这样,但颜色可以选择,你想要白色还是红色呢?");
     9         //不确定的功能选项
    10         chooseColor();
    11     }
    12     //对不确定功能定义抽象方法供具体类实现
    13     public abstract void  chooseColor();
    14 }

    第二步:具体类,实现抽象方法

    1 class Man extends BuyCar{
    2     public  void  chooseColor(){
    3         System.out.println("白色的");
    4     }
    5 }

    测试类:

    1 public class TemplateMethod{
    2     public static void main(String[] args){
    3         Man m = new Man();
    4         m.buy();
    5     }
    6 }

    输出结果:

    1 欢迎来到宝马4S店,我给你介绍下你选的这款车
    2 外观:两厢,家族式双肾栅格,典型的宝马脸
    3 发动机:2.0L双涡管单涡轮增压发动机
    4 内饰:。。。。。。。。
    5 这款车整体请看就是这样,但颜色可以选择,你想要白色还是红色呢?
    6 白色的

    就这样,我的购车之旅就结束了。也对模板方法有了新的感悟:

    该模式有他的优点,比如说:

    (1)模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

    (2)子类实现算法的某些细节,有助于算法的扩展。

    (3)通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

    但是缺点也同样明显:每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

  • 相关阅读:
    禁止微信内置浏览器调整字体大小
    常用EXE文件反编译工具【转】
    C++发送HTTP请求---亲测可行(转)
    Cesium简介 [转]
    WebGL可视化地球和地图引擎:Cesium.js
    HTML5 canvas图形库 RGraph【转】
    [GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界 【转】
    OpenGL实现多层绘制(Layered Rendering) [转]
    深度剖析OpenGL ES中的多线程和多窗口渲染技术
    OOP几大原则【转】
  • 原文地址:https://www.cnblogs.com/panhouye/p/6129742.html
Copyright © 2011-2022 走看看