Java裝飾者模式是一種在不改變原有類的前提下,動態地將一個對象的行為包裝起來,以擴展其功能的設計模式。在這篇文章中,我們將以裝飾者鴨子和火雞的例子來介紹Java裝飾者模式。
我們假設有一個鴨子類和一個火雞類,它們分別有自己的各種行為,如飛行和叫聲?,F在我們想要任務鴨子可以像火雞一樣飛行一段短距離,并且火雞可以向鴨子一樣發出“嘎嘎”叫聲。這時,我們可以使用Java裝飾者模式來實現這個功能。
public interface Duck { public void fly(); public void quack(); } public interface Turkey { public void fly(); public void gobble(); } public class MallardDuck implements Duck { public void fly() { System.out.println("I'm flying"); } public void quack() { System.out.println("Quack"); } } public class WildTurkey implements Turkey { public void fly() { System.out.println("I'm flying a short distance"); } public void gobble() { System.out.println("Gobble gobble"); } }
在上面的代碼中,我們定義了Duck和Turkey接口和它們的實現類MallardDuck和WildTurkey?,F在我們需要一個適配器來將Turkey適配成Duck。
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { for(int i=0; i<5; i++) { turkey.fly(); } } }
在上面的代碼中,我們定義了一個TurkeyAdapter來實現Duck接口,并將Turkey對象傳入構造器。在適配器中,我們通過quack方法來調用Turkey的gobble方法,將Turkey的叫聲變成Duck的叫聲;通過fly方法來調用Turkey的fly方法,將Turkey的飛行變為Duck的飛行。
現在我們只需要使用適配器來包裝原有的MallardDuck和WildTurkey即可實現我們的需求。
public static void main(String[] args) { MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); duck.fly(); duck.quack(); turkey.fly(); turkey.gobble(); turkeyAdapter.fly(); turkeyAdapter.quack(); }
在上面的Main方法中,我們創建了一個MallardDuck對象duck、一個WildTurkey對象turkey和包裝了WildTurkey的適配器對象turkeyAdapter,并對它們的方法進行了調用??梢钥吹?,通過適配器,我們成功地將Turkey對象的行為裝飾成了Duck對象的行為。
上一篇css外間距怎么設置
下一篇ajax前端數據傳給后端