精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

設計模式之裝飾器模式

開發
裝飾器模式可以將不同功能的單個模塊規劃至不同的裝飾器類中,各裝飾器類獨立自主,各司其職。

裝飾器模式(Decorator Pattern)是一種結構型設計模式,它可以在不改變現有對象的結構的情況下,動態地給對象增加一些額外的功能。裝飾器模式通過創建一個包裝對象(即裝飾器)來包裹真實對象,并在保持真實對象的接口不變的前提下,為其提供額外的功能。裝飾器模式可以在運行時根據需要選擇不同的裝飾器來組合和修改對象的行為。

  • Component(組件接口):所有被裝飾組件及裝飾器對應的接口標準,指定進行裝飾的行為方法。對應下文的的組件接口 Shape 。
  • ConcreteComponent(組件實現):需要被裝飾的組件,實現組件接口標準,只具備自身未被裝飾的原始特性。對應下文的的具體組件 Circle 、Rectangle 。
  • Decorator(裝飾器):裝飾器的高層抽象類,同樣實現組件接口標準,且包含一個被裝飾的組件。對應下文的抽象裝飾器 ShapeDecorator 。
  • ConcreteDecorator(裝飾器實現):繼承自裝飾器抽象類的具體子類裝飾器,可以有多種實現,在被裝飾組件對象的基礎上為其添加新的特性。對應下文的具體裝飾器類 RedShapeDecorator 、GreenShapeDecorator 。

優缺點

裝飾器模式的優點有:

  • 裝飾器模式是繼承的有力補充,比繼承靈活,在不改變原有對象的情況下,動態地給一個對象擴展功能,即插即用。
  • 通過使用不同的裝飾器及這些裝飾器的排列組合,可以實現不同效果。
  • 裝飾器模式完全遵守開閉原則,可以在不修改原有代碼的基礎上增加新的功能。

裝飾器模式的缺點有:

  • 裝飾器模式會增加許多子類,過度使用會增加程序的復雜性。
  • 裝飾器模式會增加對象之間的聯系,可能會引入循環引用的問題。
  • 裝飾器模式會影響對象的標識,當使用裝飾器對對象進行包裝時,對象的類型和行為可能會發生變化。

應用場景

裝飾器模式適用于以下場景:

  • 當需要給一個現有的類添加附加職責,而又不能采用繼承的方式時,可以使用裝飾器模式。例如,在不修改原有代碼的情況下給一個窗口添加滾動條或者邊框等功能。
  • 當需要動態地給一個對象增加功能,而又需要撤銷該功能時,可以使用裝飾器模式。例如,在電子商務系統中根據用戶選擇的不同優惠券來計算商品價格時,可以使用裝飾器模式來實現。
  • 當需要為一批兄弟類進行改裝或加裝功能時,可以使用裝飾器模式。例如,在一個圖形界面工具箱中為多個不同的組件提供一些公共的功能時,可以使用裝飾器模式來實現。

java 代碼示例

以下是一個實現裝飾器模式的 java 示例代碼

1.定義了一個抽象組件接口 Shape 和兩個具體組件類 Circle 和 Rectangle,

//抽象組件接口
public interface Shape {
    void draw();
}

//具體組件類:圓形
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

//具體組件類:矩形
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}

2.定義一個抽象裝飾器類 ShapeDecorator 和兩個具體裝飾器類 RedShapeDecorator 和 GreenShapeDecorator,

//抽象裝飾器類
public abstract class ShapeDecorator implements Shape {
    //持有一個抽象組件對象
    protected Shape shape;

    //構造方法
    public ShapeDecorator(Shape shape) {
        this.shape = shape;
    }

    //調用被包裝對象的方法
    @Override
    public void draw() {
        shape.draw();
    }
}

//具體裝飾器類:紅色裝飾器
public class RedShapeDecorator extends ShapeDecorator {
    //構造方法
    public RedShapeDecorator(Shape shape) {
        super(shape);
    }

    //重寫draw方法,在調用被包裝對象的方法之前或之后添加新的功能
    @Override
    public void draw() {
        //調用被包裝對象的方法
        super.draw();
        //添加新的功能
        setRedBorder();
    }

    //定義新的功能方法
    private void setRedBorder() {
        System.out.println("Setting red border");
    }
}

//具體裝飾器類:綠色裝飾器
public class GreenShapeDecorator extends ShapeDecorator {
    //構造方法
    public GreenShapeDecorator(Shape shape) {
        super(shape);
    }

    //重寫draw方法,在調用被包裝對象的方法之前或之后添加新的功能
    @Override
    public void draw() {
        //調用被包裝對象的方法
        super.draw();
        //添加新的功能
        setGreenBorder();
    }

    //定義新的功能方法
    private void setGreenBorder() {
        System.out.println("Setting green border");
    }
}

3.編寫裝飾器模式測試代碼,main 函數中創建了不同的組件和裝飾器對象,并調用了它們的方法,

//測試類
public class DecoratorPatternDemo {
    public static void main(String[] args) {
        //創建一個圓形對象
        Shape circle = new Circle();
        //創建一個矩形對象
        Shape rectangle = new Rectangle();
        //創建一個紅色裝飾器對象,包裝圓形對象
        Shape redCircle = new RedShapeDecorator(circle);
        //創建一個綠色裝飾器對象,包裝矩形對象
        Shape greenRectangle = new GreenShapeDecorator(rectangle);

        //調用各個對象的方法,展示不同的效果
        System.out.println("Normal circle:");
        circle.draw();
        System.out.println("Normal rectangle:");
        rectangle.draw();
        System.out.println("Red circle:");
        redCircle.draw();
        System.out.println("Green rectangle:");
        greenRectangle.draw();
    }
}

輸出結果如下:

Normal circle:
Drawing a circle
Normal rectangle:
Drawing a rectangle
Red circle:
Drawing a circle
Setting red border
Green rectangle:
Drawing a rectangle
Setting green border

Spring 代碼示例

要想再 Spring 項目中應用裝飾器模式,只需對以上代碼進行簡單改造即可,

1.給具體組件類 Circle、Rectangle 添加 @Component 注解,

@Component
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}

@Component
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}

2.給具體裝飾器類 RedShapeDecorator 和 GreenShapeDecorator 類添加 @Component 注解,

@Component
public class GreenShapeDecorator extends ShapeDecorator {
    // 構造方法
    public GreenShapeDecorator(@Qualifier("rectangle") Shape shape) {
        super(shape);
    }

    // 重寫draw方法,在調用被包裝對象的方法之前或之后添加新的功能
    @Override
    public void draw() {
        // 調用被包裝對象的方法
        super.draw();
        // 添加新的功能
        setGreenBorder();
    }

    // 定義新的功能方法
    private void setGreenBorder() {
        System.out.println("Setting green border");
    }
}

@Component
public class RedShapeDecorator extends ShapeDecorator {
    // 構造方法
    public RedShapeDecorator(@Qualifier("circle") Shape shape) {
        super(shape);
    }

    // 重寫draw方法,在調用被包裝對象的方法之前或之后添加新的功能
    @Override
    public void draw() {
        // 調用被包裝對象的方法
        super.draw();
        // 添加新的功能
        setRedBorder();
    }

    // 定義新的功能方法
    private void setRedBorder() {
        System.out.println("Setting red border");
    }
}

3.編寫 Spring 項目測試代碼,

@SpringBootTest
@RunWith(SpringRunner.class)
public class DecoratorTest {

    // 從Spring容器中獲取Context對象
    @Autowired
    private RedShapeDecorator redCircle;
    @Autowired
    private GreenShapeDecorator greenRectangle;

    @Test
    public void test() {
        System.out.println("Red circle:");
        redCircle.draw();
        System.out.println("Green rectangle:");
        greenRectangle.draw();
    }
}

輸出結果如下:

Red circle:
Drawing a circle
Setting red border
Green rectangle:
Drawing a rectangle
Setting green border

總結

裝飾器模式可以將不同功能的單個模塊規劃至不同的裝飾器類中,各裝飾器類獨立自主,各司其職。客戶端可以根據自己的需求自由搭配各種裝飾器,每加一層裝飾就會有新的特性體現出來,巧妙的設計讓功能模塊層層疊加,裝飾之上套裝飾,最終使原始對象的特性動態地得到增強。

責任編輯:趙寧寧 來源: waynblog
相關推薦

2023-12-13 13:28:16

裝飾器模式Python設計模式

2022-03-25 11:01:28

Golang裝飾模式Go 語言

2020-12-01 07:16:05

重學設計模式

2022-01-19 08:21:12

設計裝飾器模式

2024-02-23 12:11:53

裝飾器模式對象

2021-06-22 15:27:13

設計模式迭代器模式Java

2021-07-12 10:24:36

Go裝飾器代碼

2010-04-29 08:53:11

PHP迭代器模式

2010-04-21 08:38:18

解釋器模式PHP設計模式

2020-08-21 07:23:50

工廠模式設計

2024-04-10 12:27:43

Python設計模式開發

2015-09-08 13:39:10

JavaScript設計模式

2012-01-13 15:59:07

2021-06-16 08:56:06

模版方法模式設計模式行為型設計模式

2021-06-29 08:54:23

設計模式代理模式遠程代理

2021-12-24 07:50:45

責任鏈模式設計

2012-02-29 09:41:14

JavaScript

2021-06-09 08:53:34

設計模式策略模式工廠模式

2020-11-09 08:20:33

解釋器模式

2023-05-15 08:51:46

解釋器模式定義
點贊
收藏

51CTO技術棧公眾號

美女诱惑一区| 亚洲成a人片77777在线播放| 综合电影一区二区三区| 亚洲精品欧美极品| 国产一级做a爰片在线看免费| 国产精品45p| 一本久久a久久免费精品不卡| 日韩尤物视频| 性欧美18一19性猛交| 国产精品毛片在线看| 色一情一乱一区二区| 国产精久久久久| 经典三级一区二区| 樱花影视一区二区| 日产精品一线二线三线芒果| 国产精品老熟女视频一区二区| 黄色精品一区| 一区二区av在线| 亚洲国产精品第一页| 日韩天堂在线| 亚洲国产精品久久人人爱| 天堂√在线观看一区二区| 亚洲精品视频91| 日精品一区二区三区| 九九热精品视频国产| av网站免费在线看| 成人午夜网址| 在线成人高清不卡| 青青青免费在线| 成人免费网站在线观看视频| 久久伊99综合婷婷久久伊| 成人在线免费观看视视频| 国产精品乱子伦| 欧美日韩理论| 久久五月天综合| 中文字幕在线观看免费高清| 极品国产人妖chinesets亚洲人妖 激情亚洲另类图片区小说区 | 亚洲一区二区三区四区在线免费观看| 日本一区二区视频| 天堂网av在线播放| 高清av一区二区| 成人欧美一区二区三区黑人孕妇 | 中国女人特级毛片| 果冻天美麻豆一区二区国产| 日韩一区二区免费高清| 2025韩国理伦片在线观看| 自拍视频在线看| 午夜精品久久久久久久蜜桃app | 成人日韩欧美| 中文字幕日韩欧美一区二区三区| 日本不卡二区| 色鬼7777久久| 97se亚洲国产综合自在线| 国产伦精品一区二区三区在线| av男人天堂网| 国产在线视频一区二区| 成人黄在线观看| 伊人久久国产精品| 捆绑调教一区二区三区| 国产精品激情自拍| 国产一区免费看| 蜜桃视频一区| 国产成人精品在线视频| www.com亚洲| 日韩成人免费看| 国产精品福利在线| 伊人成人在线观看| 国产在线精品国自产拍免费| 91欧美精品成人综合在线观看| 91亚洲国产成人精品一区| 韩国成人福利片在线播放| 91嫩草视频在线观看| www日本高清| www.性欧美| 蜜桃传媒视频麻豆第一区免费观看 | 免费91在线观看| 日韩综合精品| 美女视频黄免费的亚洲男人天堂| 国产精品免费人成网站酒店| 国产精品99一区二区三| 欧美俄罗斯性视频| 久久久久久久久久影院| 日韩电影在线观看电影| 国产欧美精品va在线观看| 国产精品爽爽久久| 福利一区在线观看| 欧美人与性禽动交精品| melody高清在线观看| 中文字幕一区二区三区四区不卡| 女女百合国产免费网站| 九色porny自拍视频在线播放| 欧美色视频日本高清在线观看| 国产淫片av片久久久久久| 国产精品久久乐| 欧美成人精品1314www| 黄色短视频在线观看| 欧美日韩国产一区二区三区不卡| 久久精品精品电影网| 日韩av在线播| 麻豆国产一区二区| 国产精品久久久久久久天堂第1集| 午夜在线视频观看| 中文字幕一区二区在线播放| 丝袜人妻一区二区三区| 五月激情久久| 91精品一区二区三区在线观看| 中文在线观看免费视频| 日韩久久精品| 91精品国产一区| 欧美 日韩 国产在线观看| 国产成人精品123区免费视频| 欧美一区二区三区在线| 波多野结衣 在线| 亚洲精品午夜av福利久久蜜桃| 91精品国产91久久久久久| 一级全黄少妇性色生活片| 99精品国产视频| 亚洲国产精品影视| 欧美成人精品三级网站| 欧美精品一区二区三区蜜桃视频 | 国产一区网站| 久久久久久com| 91久久久久久久久久久久| 91小视频在线免费看| 秋霞在线一区二区| 日韩成人亚洲| 亚洲精品美女久久久久| 草视频在线观看| 日韩国产成人精品| 好吊妞www.84com只有这里才有精品| 成人高潮成人免费观看| 午夜精品影院在线观看| 日韩女优在线视频| 影视一区二区| 91精品啪aⅴ在线观看国产| 黄色av免费在线观看| 亚洲电影第三页| 图片区偷拍区小说区| 欧美激情麻豆| 96国产粉嫩美女| 日本三级在线播放完整版| 在线一区二区视频| 欧美一区二区三区成人精品| 亚洲一本视频| 国产a一区二区| www.久久ai| 91精品国产福利在线观看| 免费成人深夜夜行网站| 老司机午夜精品| 亚洲精品白虎| 国产精品原创视频| 日韩小视频在线| 影音先锋国产资源| 中文av字幕一区| 五月天av在线播放| 久久要要av| 成人久久久久久| 蜜桃视频网站在线观看| 91.成人天堂一区| 波多野结衣在线网址| 国产久卡久卡久卡久卡视频精品| 免费观看黄色的网站| 国产精品久久免费视频| xvideos成人免费中文版| 国产又粗又猛又色又| 中文字幕一区二区在线播放| 免费黄频在线观看| 亚洲精品网址| 国产乱码精品一区二区三区卡| 黄页网站大全在线免费观看| 亚洲成人教育av| 东京热一区二区三区四区| 国产欧美精品区一区二区三区 | 国产成人愉拍精品久久| 91碰在线视频| 污污网站免费观看| 午夜欧美在线| 高清不卡日本v二区在线| av2020不卡| 亚洲欧美制服丝袜| 亚洲一区在线观| 一卡二卡欧美日韩| 星空大象在线观看免费播放| 久久久久久一区二区| 一区二区三区偷拍| 中文字幕一区二区三区中文字幕| 久久久女女女女999久久| 男女网站在线观看| 4438x亚洲最大成人网| 久久精品国产亚洲AV无码男同| 91在线国产观看| 亚洲怡红院在线| 亚洲私人影院| 五月天久久综合网| swag国产精品一区二区| 日本道色综合久久影院| 欧美69xxxx| 亚洲国产精品一区二区三区| 国产精品欧美综合| 一区二区三区免费看视频| 国内精品久久99人妻无码| 捆绑紧缚一区二区三区视频| 国产aaa免费视频| 成人情趣视频| 国产chinese精品一区二区| 成人全视频免费观看在线看| 久久99久久亚洲国产| 久久伊伊香蕉| 精品剧情在线观看| 中国女人真人一级毛片| 亚洲国产日日夜夜| 成人欧美一区二区三区黑人一| 不卡的电视剧免费网站有什么| 在线看的黄色网址| 在线一区欧美| 国产日韩欧美大片| 欧美综合一区| 久久国产精品一区二区三区四区| 日韩毛片免费看| 日本免费久久高清视频| 欧美1—12sexvideos| 色悠悠久久88| 你懂的视频在线| 精品国产乱码久久久久久蜜臀| 怡红院成永久免费人全部视频| 亚洲v中文字幕| 超碰在线国产97| 国产精品国产三级国产| 极品粉嫩小仙女高潮喷水久久| 国产麻豆精品在线| 狠狠躁狠狠躁视频专区| 国产日韩1区| 中国丰满熟妇xxxx性| 欧美91福利在线观看| 亚洲一区二区三区免费观看| 国产传媒欧美日韩成人精品大片| 国产一区二区视频在线免费观看| 黄色网址在线免费播放| 亚洲色图13p| 网站黄在线观看| 精品动漫一区二区三区在线观看| 97人妻精品一区二区三区| 欧美中文字幕久久| 国产又粗又猛又黄视频| 欧美日韩一区二区免费视频| 日韩精品国产一区二区| 亚洲一区二区av在线| 蜜臀久久精品久久久用户群体| 国产精品少妇自拍| 91成人精品一区二区| 国产欧美一区二区精品性色超碰| jizz欧美性20| 久久免费视频色| aaaaa级少妇高潮大片免费看| 9久草视频在线视频精品| 日本道中文字幕| av在线不卡电影| 91视频啊啊啊| 26uuu欧美| 久久久视频6r| 国产精品嫩草影院com| www.涩涩爱| 国产精品传媒入口麻豆| 国产又黄又粗又猛又爽的| 国产精品夫妻自拍| 日韩影院一区二区| 亚洲国产精品精华液网站| 日韩高清精品免费观看| 欧美丝袜第一区| 国产精品尤物视频| 欧美精品日韩一本| 亚洲精品久久久狠狠狠爱| 精品国产麻豆免费人成网站| av女名字大全列表| 国产午夜精品一区二区三区| 日本电影全部在线观看网站视频| 久久久国产精品免费| 日韩三级电影视频| 51精品在线观看| abab456成人免费网址| 91在线视频九色| 国产精品18hdxxxⅹ在线| 欧美日韩免费高清| 97精品视频| 欧美午夜小视频| 日韩精品电影一区亚洲| 91网址在线观看精品| 成人激情小说乱人伦| 亚洲自拍偷拍一区二区| 国产精品卡一卡二卡三| 久久精品www人人爽人人| 欧美视频第一页| 国产精品久久久久久久免费| 亚洲成人久久久| av在线第一页| 高清在线视频日韩欧美| 亚洲日本在线观看视频| 97超碰在线播放| 欧美极品在线观看| 黄色录像特级片| 日日夜夜免费精品视频| 国产精品二区视频| 久久久国产一区二区三区四区小说 | 中文字幕人妻一区二区三区视频 | 国产一精品一aⅴ一免费| 国产午夜亚洲精品羞羞网站| 亚洲国产精品久| 欧洲人成人精品| 亚洲国产视频一区二区三区| 亚洲人免费视频| 色呦呦久久久| 国产精品一区二区三区免费视频| 高潮按摩久久久久久av免费| 色99中文字幕| 亚洲精品系列| 99999精品| 国产精品网站在线观看| 日韩特黄一级片| 日韩视频在线一区二区| av午夜在线| 日本国产高清不卡| 成人精品毛片| 亚洲乱码日产精品bd在线观看| 日韩国产在线观看| 中文字幕高清视频| 午夜精品福利一区二区三区av| 国产毛片毛片毛片毛片| 国产一区二区三区高清在线观看| 98色花堂精品视频在线观看| 91久久在线播放| 日韩欧美中字| 另类小说第一页| 久久久天堂av| 国产精品视频免费播放| 亚洲成人xxx| a级片在线免费| 成人免费视频视频在| 欧美永久精品| 中文字幕 欧美日韩| 中文字幕精品—区二区四季| 久久免费激情视频| 日韩精品高清在线| 日韩av影片| 精品一区二区三区日本| 精品动漫3d一区二区三区免费版 | 国产又粗又大又黄| 神马国产精品影院av| 91成人在线| 天天综合色天天综合色hd| 日日摸夜夜添夜夜添国产精品| 91精品人妻一区二区三区蜜桃欧美 | 日韩精品有码在线观看| 阿v视频在线| 黄色99视频| 亚洲综合社区| 熟女俱乐部一区二区视频在线| 欧美日韩亚洲激情| 九色视频在线观看免费播放 | 久久av影院| 丰满女人性猛交| 国产精品综合二区| 精品99久久久久成人网站免费| 日韩欧美国产综合| 久久香蕉一区| 精品乱码一区二区三区| 久久久国产精品一区二区中文| 久久亚洲AV无码专区成人国产| 欧美特级限制片免费在线观看| 亚洲麻豆精品| 亚洲影院色无极综合| 国一区二区在线观看| 日韩www视频| 色婷婷亚洲综合| 黄色在线视频网站| 国产精品久久久一区二区三区| 99亚洲一区二区| 国产激情av在线| 日韩欧美电影在线| 亚洲天堂电影| 中文字幕99| 北条麻妃国产九九精品视频| 啦啦啦免费高清视频在线观看| 亚洲性日韩精品一区二区| 国产精品亚洲欧美一级在线 | 精品午夜一区二区三区在线观看| 日日骚一区二区三区| 精品夜色国产国偷在线| 欧美成人免费全部网站| 亚洲精品久久久久久久蜜桃臀| 久久色视频免费观看| 国产日本精品视频| 97精品国产aⅴ7777| 欧美亚洲在线日韩| 亚洲av无码一区东京热久久| 在线欧美日韩国产| 波多野结依一区| 日本黄色播放器| 久久婷婷国产综合国色天香 | 91大神在线观看线路一区| xxxxxx在线观看|