一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 輕松掌握java裝飾者模式

輕松掌握java裝飾者模式

2020-06-19 11:19斷了聯(lián)系 JAVA教程

這篇文章主要幫助大家輕松掌握java裝飾者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

定義:在不必改變原類文件和使用繼承的情況下,動態(tài)地擴(kuò)展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。

特點(diǎn):

    (1) 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。

    (2) 裝飾對象包含一個真實對象的引用(reference)

    (3) 裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實的對象。

    (4) 裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時,不用修改給定對象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計中,通常是通過繼承來實現(xiàn)對給定類的功能擴(kuò)展。

企業(yè)級開發(fā)和常用框架中的應(yīng)用:IO流底層架構(gòu)

組成:

        (1)抽象構(gòu)件(Component)角色:給出一個抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對象。
  (2)具體構(gòu)件(Concrete Component)角色:定義一個將要接收附加責(zé)任的類。
  (3)裝飾(Decorator)角色:持有一個構(gòu)件(Component)對象的實例,并實現(xiàn)一個與抽象構(gòu)件接口一致的接口。
  (4)具體裝飾(Concrete Decorator)角色:負(fù)責(zé)給構(gòu)件對象添加上附加的責(zé)任。

具體實例:

 

java" id="highlighter_575410">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
 * 以下裝飾房子舉例
 */
public class Demo {
 
 public static void main(String[] args) {
 GenericHouse house = new GenericHouse();
 Garage garage = new Garage(house);
 garage.doSomething();
 Kitchen kitchen = new Kitchen(house);
 kitchen.doSomething();
 }
}
 
/**
 * 抽象構(gòu)件角色:一個接口,用以規(guī)范具體裝飾的位置
 */
interface AbstractHouse{
 public void doSomething();
}
 
/**
 * 裝飾角色: 持有要裝飾的對象
 */
class Master implements AbstractHouse{
 
 private AbstractHouse abstractHouse;
 
 public Master(AbstractHouse abstractHouse) {
 this.abstractHouse = abstractHouse;
 }
 
 public void doSomething() {
 System.out.println("裝飾角色:裝飾角色持有者,在這兒就是房子的主人");
 abstractHouse.doSomething();
 }
 
}
 
/**
 * 具體的構(gòu)件角色:具體需要被裝飾的對象
 */
class GenericHouse implements AbstractHouse{
 public void doSomething() {
 System.out.println("具體構(gòu)建角色:房子可以住人,遮風(fēng)擋雨!");
 }
}
 
/**
 * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因為裝飾角色持有被裝飾對象,
 * 所以它也就持有了被裝飾對象,可以做裝飾
 */
class Garage extends Master{
 
 public Garage(AbstractHouse abstractHouse) {
 super(abstractHouse);
 }
 
 public void doSomething() {
 super.doSomething();
 System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成車庫,所以房子可以存放車子了");
 }
}
/**
 * 具體裝飾角色: 具體的裝飾就是在這兒做的,它繼承自裝飾角色,因為裝飾角色持有被裝飾對象,
 * 所以它也就持有了被裝飾對象,可以做裝飾
 */
class Kitchen extends Master{
 
 public Kitchen(AbstractHouse abstractHouse) {
 super(abstractHouse);
 }
 
 public void doSomething() {
 super.doSomething();
 System.out.println("具體裝飾角色:在這兒做裝飾的事兒,把房子中的一間裝飾成廚房,所以房子可以做飯了");
 }
}

在實際開發(fā)中,裝飾著模式的包裝作用有很大的作用,我們可以在不改變原來對象的情況下,對對象做一些其他的操作,這樣可以避免我們改造對象,但同時我們又可以很好的完成一些操作。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产亚洲精品第一综合另类 | 97视频免费人人观看人人 | 久久99精品国产免费观看 | 欧美视频在线一区二区三区 | 欧美日韩一品道 | 国产精品视频一区二区三区w | 国产肥臀| 西野翔全部作品在线观看 | 日韩视频免费观看 | 跪在老师脚下吃丝袜脚 | 久草在在线免视频在线观看 | 亚洲精品在线免费观看视频 | 久久99国产亚洲高清观着 | 国产成人综合一区精品 | 美女被灌浣肠失禁视频 | 特黄特色一级aa毛片免费观看 | 2019年国产高清情侣视频 | 好女孩韩剧免费观看 | 成人日批视频 | 向日葵视频app下载18岁以下勿看 | 四虎欧美 | 国产一区二区免费在线 | 大ji吧快给我别停受不了视频 | 国产精品永久免费10000 | 欧美成人福利视频 | 亚洲国产视频网站 | 天堂在线看 | yellow高清免费观看日本 | 欧美综合国产精品日韩一 | 欧美1| 513热点网深夜影院影院诶 | 国产小视频网站 | 国产二区三区 | 青草福利在线 | 欧美成人aletta ocean | 1024在线视频精品免费 | 操美女| 暖暖免费高清完整版观看日本 | 东北老妇露脸xxxxx | 日本xxwwwxxxx| 99热最新在线观看 |