23种模式之一-----------装饰者模式

装饰者模式在不改变原有对象的基础之上,将功能附加到对象上。提供了比继承更有弹性的替代方案(扩展原有对象功能)
注意:
装饰者模式要求:1.装饰者中含有被装饰者的引用 2.装饰者和被装饰者应该实现同一个接口(类型)
使用场景:
适用于给一个类或者对象扩展功能!

例子:

public abstract class Reader
{
	public abstract void close();
}
//思考:对FileReader这个类的close方法进行扩展:
	//1.继承(不推荐,代码耦合度太高。不利于项目的扩展。)
	//2.装饰者模式.

public class FileReader extends Reader
{
	public void close(){
		System.out.println("FileReader closed!");
	}
}

//使用BufferedReader对FileReader中的close方法进行扩展

//1.装饰者模式中要求:装饰者中含有被装饰者的引用.
//2.装饰者模式中要求:装饰者和被装饰者应该实现同一个接口(类型).

public class BufferedReader extends Reader //BufferedReader 装饰者 
{
	//关联关系
	Reader reader; //FileReader就是被装饰者.

	//Constructor
	BufferedReader(Reader reader){//Reader reader = new FilerRead() 
		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.通过执行装饰者中的方法间接去执行被装饰者中的方法.
		//就不用关闭FileRead()中的close方法
		br.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值