zoukankan      html  css  js  c++  java
  • Java设计模式——模板方法设计模式(abstract修饰)

    解释:

    一个抽象类中,有一个主方法,再定义 1...n 个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

    解决的问题:

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

    编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式。

    抽象类的使用:

    抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

    示例:

    /**
     * 此类用于演示模板方法设计模式
     * 
     * 模板类:(抽象父类)
     *         1、实现好的方法(普通方法)
     *         2、没有实现的方法(抽象方法)
     * 
     * 应用类:(普通子类)
     *        1、实现好的方法,不用改造
     *        2、实现父类的抽象方法(改造)
     */
    public class TestTemplate {
        public static void main(String[] args) {
            
            Template t = new Sub1();
            t.caleTimes();
            
            Template t2 = new Sub2();
            t2.caleTimes();
        }
    
    }
    class Sub2 extends Template{
    
        @Override
        public void code() {
            String s = "hello";
            for (int i = 1; i <=50000; i++) {
                s+=i;
            }
        }
    }
    
    class Sub1 extends Template{
    
        @Override
        public void code() {
            long sum=0;
            for (int i = 1; i <=50000; i++) {
                sum+=i;
            }
        }
    }
    abstract class Template{
        /*
         * 功能:计算代码的耗时时间
         */
        public void caleTimes(){
            //记录一下,代码执行前距离1970-1-1 0:0:0的时间差
            long start = System.currentTimeMillis();
            
            //代码
            code();
            
            //记录一下,代码执行后距离1970-1-1 0:0:0 的时间差
            long end = System.currentTimeMillis();
            
            System.out.println("耗时:"+(end-start));
        }
        
        public abstract void code();
        
    }
  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11204039.html
Copyright © 2011-2022 走看看