• 设计模式之装饰器模式


        今天我们介绍的设计模式叫做装饰器模式,那么什么是装饰器模式,官方给出的解释为:装饰器模式(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流就使用了这种设计模式。装饰器模式的本质是在装饰器中定义了目标接口的对象引用然后通过构造方法赋值,在调用方法中先运行原目标接口的实现类的方法在此基础上添加新的功能。

  • 相关阅读:
    e824. 获得和设置JSplitPane中的子组件
    e827. 设置JSplitPane中分隔物的大小
    e826. 获得和设置JSplitPane分开的位置
    e788. 取消JSpinner的键盘编辑能力
    e790. 设置JSpinner的边框
    e789. 限制用JSpinner实现数字选择的值
    e787. 用JSpinner实现小时选择
    e793. 监听JSpinner数据变化
    e791. 为JSpinner定制编辑器
    e792. 建立一个包括所有数据的SpinnerListModel
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10353317.html
Copyright © 2020-2023  润新知