您好,登錄后才能下訂單哦!
本篇內容介紹了“java的裝飾者模式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
動態地給一個對象添加額外的職責。
裝飾者模式的基本結構如下:
Component
定義一個對象接口,可以給這些對象動態地添加職責。
ConcreteComponent
Decorator
裝飾角色,持有一個Component對象的實例,并定義一個與Componnet接口一致的接口。
ConcreteDecorator
二、裝飾者模式示例
TheGreatestSage (Component)
package com.wangmengjun.tutorial.designpattern.decorator;
public interface TheGreatestSage {
void move();
}
Change (Decorator)
package com.wangmengjun.tutorial.designpattern.decorator;
public class Change implements TheGreatestSage {
private TheGreatestSage sage;
public Change(TheGreatestSage sage) {
this.sage = sage;
}
public void move() {
sage.move();
}
}
Monkey (ConcreteComponent)
package com.wangmengjun.tutorial.designpattern.decorator;
public class Monkey implements TheGreatestSage {
public void move() {
System.out.println("Monkey move~~");
}
}
Bird (ConcreteDecorator1)
package com.wangmengjun.tutorial.designpattern.decorator;
public class Bird extends Change {
public Bird(TheGreatestSage sage) {
super(sage);
}
@Override
public void move() {
System.out.println("Bird move~~");
}
}
Fish(ConcreteDecorator2)
package com.wangmengjun.tutorial.designpattern.decorator;
public class Fish extends Change {
public Fish(TheGreatestSage sage) {
super(sage);
}
@Override
public void move() {
System.out.println("Fish move~~");
}
}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Client {
public static void main(String[] args) {
TheGreatestSage sage = new Monkey();
/**
* 單層封裝
*/
TheGreatestSage bird = new Bird(sage);
//bird.move();
TheGreatestSage fish = new Fish(bird);
//fish.move();
/**
* 多層封裝
*/
TheGreatestSage fish3 = new Fish(new Bird(sage));
fish3.move();
}
}
這種方式是否似曾相識 ?
new BufferedReader(new FileReader("F:\\test.txt"));
三、小結
3.1 適用場景
需要擴展一個類的功能,或者給一個類增加附加責任。
需要動態地給一個對象增加功能,這些功能可以再動態地撤銷。
需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關系變得不現實。
3.2 優點 vs 缺點
優點
裝飾模式與繼承關系的目的都是擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。裝飾模式允許系統動態地決定“貼上”一個需要的“裝飾”,或者去除一個不需要的“裝飾”。而繼承關系則不同,繼承關系是靜態的,它在系統運行前就決定了,運行時是不能改變的。
裝飾者模式不試圖在一個復雜的可定制的類中支持所有可預見的特性。相反你可以定義一個簡單的類,并且使用Decorator類給它逐漸的添加功能。可以從一個簡單的部件組合出復雜的功能。可以創造出出很多不同行為的組合。
缺點
使用裝飾模式會產生比使用繼承關系更多的對象,這些對象看上去類似。更多的對象會使得查錯變得困難,特別是這些對象看上去都很相像。
“java的裝飾者模式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。