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

    1、装饰设计模式

    顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下:

    2、看这个图可能不容易理解,举两个例子。

    1)首先是IO流中的知识。

    相信大家都知道缓冲流。BufferedInputStream,BufferedOutputStream 等等

    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("aaa.txt")));

    他出现的原因是什么,是因为FileInputStream的效率不高,需要对FileInputStream进行优化,对FileInputStream进行包装之后,就能使他性能变得较高。

    这种思想就是装饰设计模式的思想。

    当然装饰设计模式也有一些要求。

                        1、编写一个类,实现与被包装类相同的接口。(使这个类和数据库的驱动实现有着相同的行为)
                        2、定义一个类属性,引用被包装类的实例
                        3、定义构造方法,传入被包装类的实例
                        4、对于要改写的方法,编写自己的代码。
                        5、对于不需要改写的方法,调用原有对象的对应方法。

    2)数据库连接池

        为了避免用户的每一次请求都需要连接数据库,而数据库创建连接需要相对较大的资源,如果一个网站的访问量较大的话,极大的造成数据库的资源浪费,容易造成数据库的资源浪费,使用数据库的连接池可以有效地解决这个问题。

        用户的每一次请求如果数据库连接池存在连接的话,就在数据库的连接池中取连接。但是我们的这个数据库的连接用完之后如何处理呢,理论上是因该把这个数据库的连接返回到数据库连接池中,但是没有这样的方法来处理。

        此时,可以装饰Connection对象,将其close方法装饰,处理结果是将数据库的连接池用完放回到数据库连接池中。

      

          



  • 相关阅读:
    mongodb的常用操作(二)
    mongodb的常用操作
    OpenBSD内核之引导PBR
    OpenBSD内核之引导MBR
    OpenBSD之开篇
    “索引”、大数据的思考
    flume坑之channel.transactionCapacity和HdfsSink.batchSize
    cocos2d-x的CCAffineTransform相关变换实现原理
    MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集
    “全服单世界”的终极目标即“虚拟世界”
  • 原文地址:https://www.cnblogs.com/taotingkai/p/6257298.html
Copyright © 2011-2022 走看看