zoukankan      html  css  js  c++  java
  • 设计模式-模板模式

    1、模板模式简介

    定义:一种类行为型模式,定义一个操作中的骨架,而将实现步骤的延迟到子类中,使得子类可以不改变该骨架结构的情况下重定义某些特定步骤

    目标:不改变步骤实现不同的结果

    解决问题:解决因为小部分差异而导致的代码冗余

    优点:封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展,在父类中提取了公共的部分代码,便于代码复用

       部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

    缺点:对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度

       父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度

       由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍

    实现:

     1 /**抽象类**/
     2 public abstract class fatherClass {
     3     /**抽象类**/
     4     public void TemplateMethod(){
     5         //抽象方法
     6         Template1();
     7         Template2();
     8         Template3();
     9     }
    10     /**具体方法**/
    11     public void Template1(){
    12         System.out.println("模板方法壹号");
    13     }
    14     /**抽象方法1**/
    15     public abstract void Template2();
    16     /**抽象方法2**/
    17     public abstract void Template3();
    18 }
    19 
    20 /**具体子类1**/
    21 public class son1Class extends fatherClass {
    22     @Override
    23     public void Template2() {
    24         System.out.println("son1 抽象方法壹号");
    25     }
    26 
    27     @Override
    28     public void Template3() {
    29         System.out.println("son1 抽象方法贰号");
    30     }
    31 }
    32 
    33 /**具体子类2**/
    34 public class son2Class extends fatherClass {
    35     @Override
    36     public void Template2() {
    37         System.out.println("son2 抽象方法壹号");
    38     }
    39 
    40     @Override
    41     public void Template3() {
    42         System.out.println("son2 抽象方法贰号");
    43     }
    44 }
    45 
    46 /**测试方法**/
    47 public class test {
    48     public static void main(String[] args) {
    49         fatherClass fatherClass = new son1Class();
    50         fatherClass.TemplateMethod();
    51         System.out.println("========================================");
    52         fatherClass fatherClass1 = new son2Class();
    53         fatherClass1.TemplateMethod();
    54     }
    55 }
    56 
    57 测试结果:
    58 模板方法壹号
    59 son1 抽象方法壹号
    60 son1 抽象方法贰号
    61 ========================================
    62 模板方法壹号
    63 son2 抽象方法壹号
    64 son2 抽象方法贰号
  • 相关阅读:
    注册表清理bat
    apache2.2.14 负载均衡过程中遇到问题记录;
    thikpad 中eclipse/idea 无法获取鼠标
    PLSQL DEVELOPER 提示(错误)信息是乱码;亲测有效
    windows右键 打开方式 浏览 无法添加默认打开方式 解决
    澳洲值得代购物品汇总
    5 open source dashboard tools for visualizing data
    nginx概述
    Linux bash 参数处理办法
    Linux shell 启动配置文件设置
  • 原文地址:https://www.cnblogs.com/carblack/p/14109591.html
Copyright © 2011-2022 走看看