zoukankan      html  css  js  c++  java
  • 设计模式之装饰器模式

        今天我们介绍的设计模式叫做装饰器模式,那么什么是装饰器模式,官方给出的解释为:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。使用装饰器模式可以让我们在不使用继承的情况下动态的给原有的对象添加新的功能。

        现在假设我们需要在连接数据库的方法上面添加打印日志的功能。首先我们需要定义一个连接数据库的接口。

    public interface DbConnection {
         public void getConnection();
    }

    接下来是这个接口的具体实现类:

    public class MysqlConnection implements DbConnection{
    
        public void getConnection() {
            System.out.println("获取了mysql的连接");
        }
        
    }

    定义一个抽象的装饰器类:

    public abstract class DbConnectionDecorate implements DbConnection{
        protected DbConnection dbconnection;
        
        protected DbConnectionDecorate(DbConnection dbconnection){
            this.dbconnection = dbconnection;
        }
        
        
    }

    定义一个具体的装饰器:

    public class DbConnectionLog extends DbConnectionDecorate{
    
        protected DbConnectionLog(DbConnection dbconnection) {
            super(dbconnection);
        }
    
        public void getConnection() {
            this.dbconnection.getConnection();
            System.out.println("打印连接数据库日志");
        }
    
    }

    客户端调用:

    public static void main(String[] args) {
            DbConnection connection = new DbConnectionLog(new MysqlConnection());
            connection.getConnection();
        }

    执行结果:

    获取了mysql的连接
    打印连接数据库日志

    
    

    装饰器模式在平时的开发中运用的频率很高,其中java中的I/O流就使用了这种设计模式。装饰器模式的本质是在装饰器中定义了目标接口的对象引用然后通过构造方法赋值,在调用方法中先运行原目标接口的实现类的方法在此基础上添加新的功能。

  • 相关阅读:
    [转]ROS学习笔记十一:ROS中数据的记录与重放
    [转]百度Appollo无人车Perception Module 分析
    百度 Apollo无人车平台增加传感器
    [转]Ubuntu16.04安装搜狗输入法
    [转]Ubuntu16 压缩解压文件命令
    Baidu Apollo use: command " rosbag " not fonud
    nvidia-smi command not found Ubuntu 16.04
    启动Turtlesim,输入roscore命令,报错
    Linux系统下安装Nginx
    linux重启后JDk环境变量配置失效最终解决方案
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10353317.html
Copyright © 2011-2022 走看看