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方法装饰,处理结果是将数据库的连接池用完放回到数据库连接池中。