美文网首页
模板模式,装饰者模式

模板模式,装饰者模式

作者: 云承寒 | 来源:发表于2017-05-25 11:00 被阅读0次

模板模式

某些事情的大体流程是固定的,只是个别地方,存在一些不确定数据的动态变化,此时可以使用模板模式。

实现方式
  • 抽取固定步骤,生成抽象的模板类。

  • 分析代码,将发生变化的部分,抽取独立成一个方法。

  • 使用 final 修饰模板方法,防止模板方法被重写。

时间模板类,模拟随机获取1~1.5s的时间差

abstract class TimeDemo {

    //让实现类,去确定的开始,结束时间
    public abstract long setStartTime();
    public abstract long setEndTime();

    //获取时间差
    final public long getDifferTime() {
        long startTime = setStartTime();

        // 随机睡眠 1~1.5s,好获取数据
        Random random = new Random();
        int s = random.nextInt(501) + 1000;
        try {
            Thread.sleep(s);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        long endTime = setEndTime();
        long resTime = endTime - startTime;
        System.out.println("睡眠了:" + resTime / 1000.0 + "s");
        return resTime;
    }
}


实现类
public class Run extends TimeDemo {

    public static void main(String[] args) {

        new Run().getTime();
    }

    @Override
    public long setStartTime() {
        return System.currentTimeMillis();
    }

    @Override
    public long setEndTime() {
        return System.currentTimeMillis();
    }

    public void getTime() {

        getDifferTime();
    }
}

装饰者模式

通过在一个类的内部,维护另一个类的引用,来增强这个类的功能,实际原理是多态的应用。

//定义公共的接口规范
interface IWork {
    void work();
}

//将要被装饰增强的类
class Overseer implements IWork {

    @Override
    public void work() {
        System.out.println("工头制作零件主体");
    }
}

//装饰类1,增强被装饰类功能
class EmpOne implements IWork {

    private IWork work;
    public EmpOne(IWork work) {
        this.work = work;
    }

    @Override
    public void work() {
        work.work();
        System.out.println("工人给零件主体添加组件_1");
    }
}

//装饰类2
class EmpTwo implements IWork {

    private IWork work;
    public EmpTwo(IWork work) {
        this.work = work;
    }

    @Override
    public void work() {
        work.work();
        System.out.println("给零件主体增加组件_2");
    }
}


 public static void main(String[] args) {

        Overseer overseer = new Overseer();
        EmpOne empOne = new EmpOne(overseer);
        EmpTwo empTwo = new EmpTwo(empOne);
        empTwo.work();

        /*
         * 输出结果
         * 
         * 制作零件主体
         * 给零件主体添加组件_1
         * 给零件主体增加组件_2
         */
    }

相关文章

  • 模板模式,装饰者模式

    模板模式 某些事情的大体流程是固定的,只是个别地方,存在一些不确定数据的动态变化,此时可以使用模板模式。 实现方式...

  • 设计模式目录

    观察者模式 策略模式 装饰者模式 工厂方法模式 单例模式 命令模式 适配器模式与外观模式 模板方法模式 迭代器与组...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • 设计模式实际应用之购物车

    1. 类图 2. 用到的设计模式 ◆工厂模式 单例模式◆装饰器模式 观察者模式◆状态模式 模板方法模式 代理模式 ...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 如何利用装饰者模式在不改变原有对象的基础上扩展功能

    目录 什么是装饰者模式 普通示例 装饰者模式示例 类图关系 装饰者模式使用场景 装饰者模式优点 装饰者模式缺点 什...

  • 要读的设计模式

    模板模式,装饰模式,要深刻理解

  • C++笔记十一(C++设计模式)

    本周内容(1)设计模式简介(2)面向对象设计原则(3)模板方法(4)策略模式(5)观察者模式(6)装饰模式(7)桥...

  • 设计模式

    单例模式(饿汉式和懒汉式) 策略模式(将算法封装,不与客户端的改变而改变) 模板模式 装饰器模式 观察者模式 适配...

  • 装饰者模式

    装饰者模式 装饰者模式和适配器模式对比 装饰者模式 是一种特别的适配器模式 装饰者与被装饰者都要实现同一个接口,主...

网友评论

      本文标题:模板模式,装饰者模式

      本文链接:https://www.haomeiwen.com/subject/epwaxxtx.html