02.装饰者模式

/**

*

* @author ASUS

* @date 2018年8月22日

* @version V1.0

*

* 1.什么是装饰者修饰者模式? 此设计模式遵循的设计原则之一:类应该支持扩展,而拒绝修改(Open-Closed Principle)

*

* 实现细节:

*

* ——Component抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。

*

* ——ConcreteComponent具体构件角色(真实对象):io流中的FileInputStream、

* FileOutputStream

*

* ——Decorator装饰角色:持有一个抽象构件的引用。装饰对象接受所有客户端的请求,并把这些请求转发给真实的对象。这样,就能在真实对象调用前后增加新的功能。

*

* ——ConcreteDecorator具体装饰角色:负责给构件对象增加新的责任。

*

* 总结: 装饰模式(Decorator)也叫包装器模式(Wrapper)

*

* 装饰模式降低系统的耦合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。

*

* 优点: 扩展对象功能,比继承灵活,不会导致类个数急剧增加 可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象

* 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构件子类和具体装饰子类

*

* 缺点: 产生很多小对象。大量小对象占据内存,一定程度上影响性能 装饰模式易于出错,调试排查比较麻烦

*

* 2.使用一道题目说明

*

* 把输入的大写字母转换小写 小写字母转换大写 继承装饰着

*/

class MyOwener extends FilterInputStream {

 

protected MyOwener(InputStream in) {

super(in);

// TODO Auto-generated constructor stub

}

 

public int read() throws IOException {

int c = 0;

if ((c = super.read()) != -1) {

if (Character.isLowerCase((char)c)) {// 是小写

// 转换为小写

return Character.toUpperCase((char)c);

} else if (Character.isUpperCase((char)c)) {// 是大写

// 转换为大写

return Character.toLowerCase((char)c);

} else {// 不是字母直接返回

return c;

}

} else {

return -1;

}

}

}

 

public class Test {

public static void main(String[] args) {

try {

InputStream is = new MyOwener(new BufferedInputStream(new FileInputStream(new File("./test.txt"))));

int c = 0;

while ((c = is.read()) != -1) {

System.out.print((char)c);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值