package com.donnie;
//单向适配器模式
/*class ReadStrFromFile{
public void read(){
System.out.println("从文件上读取字符串");
}
}
class Convert{
public void toUpper(){
System.out.println("转大写");
}
}
class SubReadStrFromFile extends ReadStrFromFile{
private Convert convert;
public SubReadStrFromFile(Convert convert){
this.convert=convert;
}
public void read(){
super.read();
convert.toUpper();
}
}
public class Decorate {
public static void main(String args[]){
SubReadStrFromFile sf=new SubReadStrFromFile(new Convert());
sf.read();
}
}*/
//-----------------------------------------
/*单向适配器模式是在主模块上接入一个扩展模块,用继承方法
* 优势是:能够很好的应付扩展模块的切换
* 缺陷:扩展模块无法很好的应付主模块的切换
* 假如上面的扩展模块Convert为主模块ReadStrFromFile服务,但又得为另一个主模块ReadStrFromNet服务
* 单向适配器,就必须得为ReadStrFromNet再写一个子类,这样就麻烦
*/
//装饰模式要点,主模块的接口注入扩展模块
interface Iread{
public abstract void read();
}
class ReadStrFromFile implements Iread{
public void read(){
System.out.println("从文件上读取字符串");
}
}
class ReadStrFromNet implements Iread{
public void read(){
System.out.println("从网络上读取字符串");
}
}
class Convert {
private Iread iread;
public Convert(Iread iread){
this.iread=iread;
}
public void toUpper(){
iread.read();
System.out.println("转大写");
}
}
public class Decorate {
public static void main(String args[]){
Convert ct=new Convert(new ReadStrFromNet());
ct.toUpper();
}
}
/*
* 现实中案例java读中文的方法就是用到装饰模式
* FileReader fis= new FileReader(“filaname”);
BufferedReader br= new BuffreedReader(fis);
单向适配器模式与装饰模式要点相比,就是考滤,哪些模块切换的可能性大些
模式提供了一个解决方案,它是一种设计方法
为了降低耦合性增加灵活性
Spring是提供了降低耦合性的一种工具
设计模式提供了常见应用中降低耦合性的设计思想
具体问题还得具体分析*/