原文网址:Java设计模式--实例_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java设计模式的实例。
单例模式
场景
多个对象共享数据或者共用方法。
适配器模式
场景
项目中要对设备进行控制,所有种类的设备都有一个Adapter(有@Component),项目启动时,调用所有Adapter,通过读数据库来确定是否已经支持此设备,若支持,则new一个本类设备的Platform。
前端请求进来之后,会根据所有Platform进行匹配,调用到某类设备的Platform,再对本类设备的请求进行分发:开关、亮度等控制。
IO流(装饰模式)
概述
通过简单模拟,我们发现readLine方法底层运用的还是read方法,它的出现是增强了read方法的功能。
BufferedReader就是对FileReader的增强。
思想:增强功能,是通过被增强的对象传递给增强类。(这种设计模式叫做装饰设计模式。)
定义
装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能。那么,自定义的该类就称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。
装饰和继承的区别
- 装饰模式比继承要灵活,避免了继承体系臃肿
- 降低了类与类之间的关系。
- 将继承结构转变为组合结构。
注意
装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的功能,所以,装饰类和被装饰类通常都属于一个体系中的。
自定义装饰类
我们定义的MyBufferedReader就是一个装饰类,现在定义的只能对一个方法进行包装。
那么我们要装饰一组类,怎么办?传进他们的父类Reader就可以了。
class MyBufferedReader extends Reader
{
private Reader r;
MyBufferedReader(Reader r){
this.r=r;
}
}