多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 裝飾者模式

裝飾者模式

來源:程序員人生   發布時間:2015-06-09 08:04:11 閱讀次數:3352次

裝潢模式:動態地給1個對象添加1些額外的職責,就增加功能而言,裝潢者模式比生成子類更加靈活。Component是定義1個對象接口,可以給這些對象動態地添加職責,ConcreteComppnent是定義了1個具體的對象,也能夠給這個對象添加1些職責,Decorator,裝潢抽象類,繼承了Component,從外類來擴大Component類的功能,但對Component來講,是無需知道Decorator的存在的,至于ConcreteDecorator就是具體的裝潢對象,起到給Component添加職責的功能




上面是裝潢者模式Decorator的類圖。

實現代碼以下:

Component類: abstract class Component{ public abstract void operation(); } ConcreteComponent類: class ConcreteCompoent extends Component{ public void operation{ System.out.println("具體對象的操作:"); } } Decorator類: abstract class Decorator extends Compoent{ protected Component compoent; pbulic void setComponent(Component component){ this.component = component; } public void operation(){ if(component!=null){ component.Operation(); } } } class ConcreteDecortorA extends Decorator{ private String addedState; public void operation(){ super.operation(); addedState = "new Stare"; System.out.println("具體裝潢對象A的操作"); } } class ConcreteDecortorB extends Decorator{ public void Operation(){ super.Operation(); AddedBehavior(); System.out.println("具體裝潢對象B的操作"); } private void AddedBehavior(){ } } public class Test{ public static void main(String[] args) { ConcreteComponent c = new ConcreteComponent(); ConcreteComponentA d1 = new ConcreteComponentA(); ConcreteComponentB d2 = new ConcreteComponentB(); d1.setComponent(c); d2.setComponent(d1); d2.operation(); } }

裝潢者模式是利用setComponent來對對象進行包裝的,這樣每一個裝潢對象的實現就和如何使用這個對象分離開了,每一個裝潢對象只關心自己的功能,不需要關心如何被添加到對象鏈當中。

如果只有1個ConcreteComponent類而沒有抽象的Component類,那末Decotator類可以是ConcreteComponent的1個子類,一樣道理,如果只有1個ConcreteDecorator類,那末就沒有必要建立1個單獨的Decorator類,而可以把Decorator和ConcreteDecorator的責任合并成1個類。

下面是1個例子:

public class Person { public Person() { } private String name; public Person(String name) { this.name = name; } public void show() { System.out.println("打扮的:" + name); } } public class Finery extends Person { protected Person component; public void Decorate(Person component) { this.component = component; } public void show() { if (component != null) { component.show(); } } } class TShirts extends Finery { public void show() { System.out.println("大T恤"); super.show(); } } class BigTrouser extends Finery { public void show() { System.out.println("垮褲"); super.show(); } } class Sneakers extends Finery { public void show() { System.out.println("破球鞋"); super.show(); } } class LeatherShoes extends Finery { public void show() { System.out.println("皮鞋"); super.show(); } } class Tie extends Finery { public void show() { System.out.println("領帶"); super.show(); } } class Suit extends Finery { public void show() { System.out.println("西裝"); super.show(); } } public class Test { public static void main(String[] args) { Person xc = new Person("菜鳥"); System.out.println("第1種打扮"); Sneakers pqx = new Sneakers(); BigTrouser kk = new BigTrouser(); TShirts dtx = new TShirts(); pqx.Decorate(xc); kk.Decorate(pqx); dtx.Decorate(kk); dtx.show(); } }

小結:
裝潢者模式是為已有功能動態地添加更多功能的1種方式,甚么情況用到呢?當系統需要新的功能的時候,在1般情況下,我們想到的是向舊的類中添加新的代碼。這些新的代碼通常裝潢了原有類的核心職責或主要行動,他們在主類中加入了新的字段、新的方法和新的邏輯,從而增加了主類的復雜度,而這些新加入的東西僅僅是為了滿足1些只有在某種特定情況下才會履行的特殊行動的需要,而裝潢者模式可以提供1個非常好的解決方案,它把每一個要裝潢的功能放在單獨的類中,并讓這個類包裝它所要裝潢的對象,因此,當需要履行特殊行動時,客戶代碼就能夠在運行時根據需要有選擇地、按順序地使用裝潢功能包裝對象了。裝潢者模式的優點是把類中的裝潢功能從類中搬移去除,這樣可以簡化原本的類;另外1個使有效地把類的核心職責和裝潢功能辨別開了,而且可以去除相干類中重復的裝潢邏輯。



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产大学生露脸激情 | 日本午夜理伦三级在线观看 | 日本大胆一区免费视频 | 亚洲网视频 | 欧美一级特黄特黄毛片 | 羞羞网页登界面入口 | 欧美一区二区三区在观看 | www网站在线观看 | 国产 日韩 欧美 综合 | 国产成人一级片 | 成人性色生活片免费看爆迷你毛片 | 欧美高清一区二区三区欧美 | 精品久久久久久久一区二区手机版 | 欧美黑人粗大 | 在线免费观看福利 | 欧美一级在线全免费 | 日本最新伦中文字幕 | 国产精品久久久久久久hd | 欧美黑人vs亚裔videos | 五月婷婷在线免费观看 | 亚洲在线看片 | 亚洲十欧美十日韩十国产 | 国美女福利视频午夜精品 | 噜噜噜噜噜在线观看视频 | 日韩欧美伊人久久大香线蕉 | 91久久偷偷做嫩草影院免费 | 亚洲国产欧美在线人网站 | 色午夜视频 | 毛片网站观看 | 免费在线一级毛片 | 国产亚洲精品一区久久 | 精品久久影院 | 亚洲高清不卡视频 | 国产欧美日本在线 | 日韩理论在线播放 | 免费在线视频观看 | 国产日韩一区 | 国产精品免费一区二区三区四区 | 日本www黄 | 精品中文字幕不卡在线视频 | 高清在线播放 |