【轉(zhuǎn)】http://www.iteye.com/topic/317132
裝飾器涉及四個(gè)名詞
1、接口或者抽象基類
2、被裝飾對(duì)象,也就是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)了1中提到的接口或者抽象基類的實(shí)現(xiàn)類。
3、裝飾對(duì)象,就是去裝飾被裝飾對(duì)象的對(duì)象
4、繼承裝飾對(duì)象類的子類,也就是具體的裝飾器類了。
說(shuō)了這么多,估計(jì)你基本跟沒(méi)聽(tīng)說(shuō)過(guò)一樣。好了,來(lái)段代碼,看看
//這是第一類名詞
public interface IDecorate
{
public void sayHello();
}
//這是第二類名詞
public class DecorateImpl implements IDecorate
{
public void sayHello()
{
System.out.print("Hello");
}
}
//這是第三類名詞,真正的裝飾器就在這里開(kāi)始了,也是所有欲實(shí)現(xiàn)裝飾器的父類
public class Decorate implements IDecorate
{
//聲明一個(gè)被裝飾的對(duì)象
private IDecorate decorate;
//被裝飾對(duì)象從裝飾器的構(gòu)造函數(shù)中傳進(jìn)來(lái)(必須這樣做)
public Decorate(IDecorate decorate)
{
this.decorate = decorate;
}
//在基類裝飾器中只調(diào)用被裝飾對(duì)象的方法
public void sayHello()
{
decorate.sayHello();
}
}
再對(duì)這個(gè)裝飾器的基類說(shuō)明一下,在每個(gè)裝飾器模式中,這個(gè)類的結(jié)構(gòu)基本不變
或者說(shuō)這上面是裝飾器第三類名詞中最小的類了,必須有以上定義的這些元素。
//這是第四類名詞,裝飾就看這里了
public class SimpleDecorate extends Decorate
{
public Decorate(IDecorate decorate)
{
super(decorate);
}
//開(kāi)裝飾了哦。。。
public void sayHello()
{
//在原來(lái)的方法中加入了sayChina方法。
sayChina();
super.sayHello();
//在原來(lái)的方法中加入了sayWorld方法。
sayWorld();
}
public void sayChina()
{
System.out.print("China, ");
}
public void sayWorld()
{
System.out.print(" World!\n");
}
}
//來(lái),測(cè)試一下
public void TestDecorate()
{
//不使用裝飾器
public static void unUseDecorate(IDecorate decorate)
{
//輸出 Hello
decorate.sayHello();
}
//使用裝飾器
public static void useDecorate(IDecorate decorate)
{
IDecorate simpleDecorate = new SimpleDecorate(decorate);
//要調(diào)用裝飾了的方法
//輸出 China, Hello World!
simpleDecorate.sayHello();
}
public static void main(String[] argv)
{
IDecorate decorate = new DecorateImpl();
}
}
//是不是發(fā)現(xiàn),原來(lái)只輸出的hello的方法被裝飾后,在其前和其后分別輸出了china和world啦。
看到裝飾器的威力了吧,把原來(lái)不變的方法改變了。那我們就來(lái)談?wù)勊氖褂脠?chǎng)景吧:
1、裝飾器模式主要裝飾供外部調(diào)用的接口方法,如果一個(gè)接口方法只是提供給內(nèi)部調(diào)用,則不能使用該模式。
2、裝飾器模式主要裝飾可能要改變的接口方法,如果類中的某種行為在將來(lái)可能發(fā)生變化,而你又懶得去改變
?? 原來(lái)的類,那么就可以考慮使用裝飾器模式了。
裝飾器涉及四個(gè)名詞
1、接口或者抽象基類
2、被裝飾對(duì)象,也就是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)了1中提到的接口或者抽象基類的實(shí)現(xiàn)類。
3、裝飾對(duì)象,就是去裝飾被裝飾對(duì)象的對(duì)象
4、繼承裝飾對(duì)象類的子類,也就是具體的裝飾器類了。
說(shuō)了這么多,估計(jì)你基本跟沒(méi)聽(tīng)說(shuō)過(guò)一樣。好了,來(lái)段代碼,看看
//這是第一類名詞
public interface IDecorate
{
public void sayHello();
}
//這是第二類名詞
public class DecorateImpl implements IDecorate
{
public void sayHello()
{
System.out.print("Hello");
}
}
//這是第三類名詞,真正的裝飾器就在這里開(kāi)始了,也是所有欲實(shí)現(xiàn)裝飾器的父類
public class Decorate implements IDecorate
{
//聲明一個(gè)被裝飾的對(duì)象
private IDecorate decorate;
//被裝飾對(duì)象從裝飾器的構(gòu)造函數(shù)中傳進(jìn)來(lái)(必須這樣做)
public Decorate(IDecorate decorate)
{
this.decorate = decorate;
}
//在基類裝飾器中只調(diào)用被裝飾對(duì)象的方法
public void sayHello()
{
decorate.sayHello();
}
}
再對(duì)這個(gè)裝飾器的基類說(shuō)明一下,在每個(gè)裝飾器模式中,這個(gè)類的結(jié)構(gòu)基本不變
或者說(shuō)這上面是裝飾器第三類名詞中最小的類了,必須有以上定義的這些元素。
//這是第四類名詞,裝飾就看這里了
public class SimpleDecorate extends Decorate
{
public Decorate(IDecorate decorate)
{
super(decorate);
}
//開(kāi)裝飾了哦。。。
public void sayHello()
{
//在原來(lái)的方法中加入了sayChina方法。
sayChina();
super.sayHello();
//在原來(lái)的方法中加入了sayWorld方法。
sayWorld();
}
public void sayChina()
{
System.out.print("China, ");
}
public void sayWorld()
{
System.out.print(" World!\n");
}
}
//來(lái),測(cè)試一下
public void TestDecorate()
{
//不使用裝飾器
public static void unUseDecorate(IDecorate decorate)
{
//輸出 Hello
decorate.sayHello();
}
//使用裝飾器
public static void useDecorate(IDecorate decorate)
{
IDecorate simpleDecorate = new SimpleDecorate(decorate);
//要調(diào)用裝飾了的方法
//輸出 China, Hello World!
simpleDecorate.sayHello();
}
public static void main(String[] argv)
{
IDecorate decorate = new DecorateImpl();
}
}
//是不是發(fā)現(xiàn),原來(lái)只輸出的hello的方法被裝飾后,在其前和其后分別輸出了china和world啦。

看到裝飾器的威力了吧,把原來(lái)不變的方法改變了。那我們就來(lái)談?wù)勊氖褂脠?chǎng)景吧:
1、裝飾器模式主要裝飾供外部調(diào)用的接口方法,如果一個(gè)接口方法只是提供給內(nèi)部調(diào)用,則不能使用該模式。
2、裝飾器模式主要裝飾可能要改變的接口方法,如果類中的某種行為在將來(lái)可能發(fā)生變化,而你又懶得去改變
?? 原來(lái)的類,那么就可以考慮使用裝飾器模式了。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
