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

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

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