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流就使用了这种设计模式。装饰器模式的本质是在装饰器中定义了目标接口的对象引用然后通过构造方法赋值,在调用方法中先运行原目标接口的实现类的方法在此基础上添加新的功能。

  • 相关阅读:
    WinAPI: ExtTextOut 扩展的文本输出
    WinAPI: SetTextCharacterExtra 设置字符间距
    WinAPI: DrawTextEx 多功能文本绘制
    WinAPI: sndPlaySound 播放 wav 文件
    WinAPI: SetTextColor 设置设备环境的文本颜色
    WinAPI: DrawText 将文本绘制到指定的矩形中
    WinAPI: GetTextColor 获取设备环境的文本颜色
    WinAPI: GetTextAlign 获取绘图环境的文本对齐方式
    ulimit限制之nproc问题
    基于EPOLL写的HTTP服务器(加入了线程池)
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10353317.html
Copyright © 2011-2022 走看看