8.24.1 装饰者模式

装饰者模式:用于对类扩展功能
例如:对FileReader这个类的close方法进行扩展:
1.继承(不推荐,代码耦合度太高。不利于项目的扩展。)
2.装饰者模式.  
//1.装饰者模式中要求:装饰者中含有被装饰者的引用.
//2.装饰者模式中要求:装饰者和被装饰者应该实现同一个类型.  
public abstract class Reader//Reader 公共父类或共同实现的接口
{
    public abstract void close();
}  
 
public class FileReader extends Reader //FileReader 被装饰者
{
    public void close()
    {
        System.out.println("FileReader closed!");
    }
} 
 
public class BufferedReader extends Reader //BufferedReader 装饰者 
{
    //关联关系
    Reader reader; //这里使用多态,降低了装饰者和被装饰者的耦合度!
 
    //Constructor
    BufferedReader(Reader reader)
    {
        this.reader = reader;
    }
 
    //对FileReader中的close方法进行扩展
    public void close()
    {
        //扩展
        System.out.println("扩展代码1");
        reader.close();
        System.out.println("扩展代码2");
    }
 
} 
 
public class Test02
{
    public static void main(String[] args)
    {
        /*
        //1.创建被装饰者
        FileReader fr = new FileReader();
 
        //2.创建装饰者
        BufferedReader br = new BufferedReader(fr);
        */
 
        BufferedReader br = new BufferedReader(new FileReader());
 
        //3.通过执行装饰者中的方法间接去执行被装饰者中的方法.
        br.close();//这里只需要执行最外层的对象的方法就可以了,程序会一层一层调用里层的方法!
    }
}  
posted @ 2017-08-24 16:17  ~~晴天~^.^  阅读(124)  评论(0编辑  收藏  举报