使用装饰模式
package
com.javaeye.kang.decorator;
/**
*
装
饰
模式要点:将主模
块
接口注入
扩
展模
块
*
面向接口
编
程
*
优
点:能
够
很好地
应
付主模
块
的切
换
(上位切
换
)
*
缺点:无法很好地
应
付服
务
模
块
的切
换
(下位切
换
,服
务
模
块
切
换
)
*
适用
场
合:
现
在
Convert
为
ReadFromFile
提供服
务
,将来又
为
ReadFromNet
服
务
。
*
说
明:
优
缺点基本和
单
向适配器模式相反,可根据
实际
情况
进
行
选择
*/
//
主模
块
接口
interface
IRead {
public
abstract
void
read();
}
//
实现
了主模
块
接口的
类
(从文件
读
取字符串)
class
ReadFromFile
implements
IRead {
public
void
read() {
System.
out
.println(
"
从文件
读
取字符串
"
);
}
}
//
实现
了主模
块
接口的
类
(从网
络读
取字符串)
class
ReadFromNet
implements
IRead {
public
void
read
() {
System.
out
.println(
"
从网
络读
取字符串
"
);
}
}
//
装
饰
模式
,
将主模
块
接口注入
进
来(使用
spring
)
//
扩
展模
块
,可以
为
任何
实现
了
IRead
接口的主模
块类
提供服
务
class
Convert {
private
IRead
iRead
;
public
Convert(IRead iRead) {
this
.
iRead
= iRead;
}
public
void
convertToUpper() {
iRead
.read();
System.
out
.println(
"
转换
成大写字母
"
);
}
}
//
客
户
端,最
终
使用方
public
class
DecoratorTest {
public
static
void
main(String[] args) {
//
这边
可以使用
new
Convert(new ReadFromFile())
来从文件
读
取字符串
//
也可以使用
new Convert(new ReadFromNet())
来从网
络读
取字符串
Convert convert =
new
Convert(
new
ReadFromFile());
convert.convertToUpper();
}
}
测试结果:
从文件读取字符串
转换成大写字母
假如改成:
Convert convert =
new
Convert(
new
ReadFromNet());
则测试结果:
从网络读取字符串
转换成大写字母