黑马程序员:装饰类的作用——增强被装饰类的方法的功能(利用组合实现复用)

---------------------- java+android开发android培训、期待与您交流! ----------------------

 装饰类,的特点在于灵活,高效,可以避免复杂的类的继承体系。

装饰类,在疯狂java讲义的5.8.2节出,叫做利用组合实现复用。可以作为参考。

/*
MyReader --专门用于读取数据的类
    |--MyTextReader
		|--MyBufferedTextReader  
	|--MyMediaReader 
		|--MyBufferedMediaReader  
	|--MyDataReader    //后续可能还需要增加的类
		|--MyBufferedDataReader
//为了提高读取速度和效率,引入缓冲区,所以按照上面的逻辑,需要引入多个类来完成各自的缓冲,结构复杂,效率低

可以用一般的装饰类
class MyBufferedReader
{
    MyBufferedReader( MyTextReader text)
	{}
	MyBufferedReader( MyMediaReader media)
	{}
	MyBufferedReader( MyDataReader data)
	{}
	//这么做还是开销大,体系复杂。扩展性很差

}

上面这个类的扩展性很差
找到其参数的共同类型,通过多态的形式,可以提高扩展性
class MyBufferedReader extends MyReader
{
<span style="white-space:pre">	</span>private MyReader r;
<span style="white-space:pre">	</span>MyBufferedReader(MyReader r)
<span style="white-space:pre">	</span>{}


}

这个时候,结构为:
MyReader --专门用于读取数据的类
	|--MyTextReader
	|--MyMediaReader
	|--MyDataReader
	|--MyBufferedReader   



<pre code_snippet_id="406366" snippet_file_name="blog_20140626_1_4508160" class="html" name="code">装饰模式比继承要灵活,避免了继承体系臃肿
而且,降低了类与类之间的关系


装饰类因为增强已有对象,具备的功能呢和已有的是相同的,只不过,提供了更强的功能。
所以,装饰类和被装饰类通常是都属于一个体系中

<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>


</pre>

 

 

/*
装饰类设计模式:
当想要对已有的对象进行功能增强时
可以定义类。将已有的对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类为装饰类。
装饰类通常会通过构造方法接受被装饰的对象。并基于被装饰对象的功能提供更强的功能。

*/

class Person 
{

	public void chifan()
	{
		System.out.println("吃饭");

	}

}


class SuperPerson
{
	private Person p;
	SuperPerson(Person p )
	{
		this.p = p;
	}

	public void SuperChiFan()
	{
		System.out.println("开胃酒");
		p.chifan();
		System.out.println("吃饭");
		System.out.println("喝汤");
	}
}




class  PersonDemo
{
		public static void main(String[] args) 
	{
		Person p= new Person();
		SuperPerson sp = new SuperPerson(p);
		sp.SuperChiFan();

	}
	
}



 

 

 

 

 

 

---------------------- java+android开发android培训、期待与您交流! ----------------------详细请查看:www.itheima.com 



posted @ 2014-06-26 00:04  shoneworn  阅读(230)  评论(0编辑  收藏  举报