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

  • 相关阅读:
    nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。
    centos7安装nodejs
    .Net Core Linux centos7行—jenkins linux 构建.net core web app
    asp.net core 编译mvc,routing,security源代码进行本地调试
    发现一个很N且免费的html5拓扑图 关系图 生成组件
    Quill编辑器介绍及扩展
    vs2017 rc 离线安装包制作
    单体架构风格
    GlusterFS 安装 on centos7
    Expect 安装 on centos7
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10353317.html
Copyright © 2011-2022 走看看