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

    一、定义

    一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

    意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    二、实现

    我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。

    TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。

     步骤1、创建一个抽象类,它的模板方法被设置为final

     1 public abstract class Game {
     2    abstract void initialize();
     3    abstract void startPlay();
     4    abstract void endPlay();
     5  
     6    //模板
     7    public final void play(){
     8  
     9       //初始化游戏
    10       initialize();
    11  
    12       //开始游戏
    13       startPlay();
    14  
    15       //结束游戏
    16       endPlay();
    17    }
    18 }

    步骤2、创建扩展的上述实体类

     1 public class Cricket extends Game {
     2  
     3    @Override
     4    void endPlay() {
     5       System.out.println("Cricket Game Finished!");
     6    }
     7  
     8    @Override
     9    void initialize() {
    10       System.out.println("Cricket Game Initialized! Start playing.");
    11    }
    12  
    13    @Override
    14    void startPlay() {
    15       System.out.println("Cricket Game Started. Enjoy the game!");
    16    }
    17 }
     1 public class Football extends Game {
     2  
     3    @Override
     4    void endPlay() {
     5       System.out.println("Football Game Finished!");
     6    }
     7  
     8    @Override
     9    void initialize() {
    10       System.out.println("Football Game Initialized! Start playing.");
    11    }
    12  
    13    @Override
    14    void startPlay() {
    15       System.out.println("Football Game Started. Enjoy the game!");
    16    }
    17 }

    步骤3、使用 Game 的模板方法 play() 来演示游戏的定义方式

     1 public class TemplatePatternDemo {
     2    public static void main(String[] args) {
     3  
     4       Game game = new Cricket();
     5       game.play();
     6       System.out.println();
     7       game = new Football();
     8       game.play();      
     9    }
    10 }
  • 相关阅读:
    应用文档iOS, 在应用之间共享文档。
    项目范围项目管理项目范围管理
    网站教程一些学习网站
    布局文件Android ListView入门知识各种Adapter配合使用
    随波逐流希望2013年半年小总结(复杂艰难的半年)
    安全微软微软安全新闻聚焦双周刊第三十二期
    对象类《大话设计模式》部分模式总结(一):
    循环跳转JAVA Continue实例详解
    节点程序寻找链表倒数第k个节点
    box2d编译
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10496625.html
Copyright © 2011-2022 走看看