zoukankan      html  css  js  c++  java
  • 大话设计模式之模板方法模式

    模板方法模式

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

    优点: 

      1、封装不变部分,扩展可变部分。

      2、提取公共代码,便于维护。

      3、行为由父类控制,子类实现。

    缺点:

      每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

    使用场景: 

      1、有多个子类共有的方法,且逻辑相同。

      2、重要的、复杂的方法,可以考虑作为模板方法

    具体实现

    抽象算法类

    package com.chenpt.designModel.templateModel;
    
    /**
     * @Author: chen
     * @Description:
     * @Date: created in 2018/8/28
     * @Modified By:
     */
    public abstract class Game {
    
        abstract void initGame();
        abstract void startGame();
        abstract void endGame();
    
        public void play(){
            initGame();//初始化游戏
            startGame();//开始游戏
            endGame();//游戏结束
        }
    
    }
    

     子类一

    package com.chenpt.designModel.templateModel;
    
    /**
     * @Author: chen
     * @Description:
     * @Date: created in 2018/8/28
     * @Modified By:
     */
    public class BasketballGame extends Game {
        @Override
        void initGame() {
            System.out.println("篮球运动准备中···");
        }
    
        @Override
        void startGame() {
            System.out.println("开始比赛···");
        }
    
        @Override
        void endGame() {
            System.out.println("比赛结束");
        }
    }
    

     子类二

    package com.chenpt.designModel.templateModel;
    
    /**
     * @Author: chen
     * @Description:
     * @Date: created in 2018/8/28
     * @Modified By:
     */
    public class FootballGame extends Game {
        @Override
        void initGame() {
            System.out.println("足球运动准备中···");
        }
    
        @Override
        void startGame() {
            System.out.println("开始比赛···");
        }
    
        @Override
        void endGame() {
            System.out.println("比赛结束");
        }
    }
    

     客户端

    package com.chenpt.designModel.templateModel;
    
    /**
     * @Author: chen
     * @Description:
     * @Date: created in 2018/8/28
     * @Modified By:
     */
    public class MainTest {
    
        public static void main(String[] args){
            Game bgame = new BasketballGame();
            bgame.play();
            System.out.println("=============无敌分割线===============");
            Game fgame = new FootballGame();
            fgame.play();
        }
    
    }
    //执行结果
    篮球运动准备中···
    开始比赛···
    比赛结束
    =============无敌分割线===============
    足球运动准备中···
    开始比赛···
    比赛结束
    

      

     

     

     

  • 相关阅读:
    关于”数据库连接串中的 |DataDirectory|”
    【入门经典】Master和Content页面之一
    使用数据绑定控件
    ASP.NET数据绑定概述
    【入门经典】多层次的母版页(嵌套)
    【入门经典】在母版页中使用CSS
    内联表达式
    使用【表格式】数据绑定控件
    SQL Server 2005数据库从【Express版】迁移到【正式版】连接字符串存在的问题
    【入门经典】准备工作
  • 原文地址:https://www.cnblogs.com/chenpt/p/9546371.html
Copyright © 2011-2022 走看看