Java的IO结构,FilterInputStream就是一个装饰者
说明(代码 + 原码截图)
public class Decorator {
public static void main(String[] args) throws Exception {
/*说明
1.InputStream是抽象类,类似前面的Drink
2.FileInputStream 是 InputStream 的子类,类是前面的DeCaf,LongBlack 被装饰者
3.FilterInputStream 是 InputStream 的子类,类似前面的Decorator 修饰者
4.DataInputStream 是 FilterInputStream 的子类,具体的修饰者,类似前面的Milk,Soy等
5.FilterInputStream 类有一个成员变量protected volatile InputStream in; 即包含被装饰者
6.分析的出在jdk的io体系中 就是使用了装饰者模式
*/
DataInputStream dis = new
DataInputStream(new FileInputStream("d:\\test.txt"));
System.out.println(dis.read());
dis.close();
}
}
组合模式
应用案例 - 学校院系展示需求
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系 组成,一个学校有多个学院,一个学院有多个系。如图:
传统方案解决学校院系展示
示意图
传统方案解决学校院系展示存在的问题分析
将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分 层次的
实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个 学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如 对学院、系的添加,删除,遍历等