<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      裝飾器模式

      設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的。

       

      裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。

      裝飾器模式通過將對象包裝在裝飾器類中,以便動態地修改其行為。https://huoyundi.com/

      這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

      我們通過下面的實例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。

       

      裝飾器模式

      裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。

      裝飾器模式通過將對象包裝在裝飾器類中,以便動態地修改其行為。

      這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

      我們通過下面的實例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。

      概要

      意圖

      動態地給一個對象添加額外的職責,同時不改變其結構。裝飾器模式提供了一種靈活的替代繼承方式來擴展功能。

      主要解決的問題

      • 避免通過繼承引入靜態特征,特別是在子類數量急劇膨脹的情況下。
      • 允許在運行時動態地添加或修改對象的功能。

      使用場景

      • 當需要在不增加大量子類的情況下擴展類的功能。
      • 當需要動態地添加或撤銷對象的功能。

      實現方式

      • 定義組件接口:創建一個接口,規定可以動態添加職責的對象的標準。
      • 創建具體組件:實現該接口的具體類,提供基本功能。
      • 創建抽象裝飾者:實現同樣的接口,持有一個組件接口的引用,可以在任何時候動態地添加功能。
      • 創建具體裝飾者:擴展抽象裝飾者,添加額外的職責。

      關鍵代碼

      • Component接口:定義了可以被裝飾的對象的標準。
      • ConcreteComponent類:實現Component接口的具體類。
      • Decorator抽象類:實現Component接口,并包含一個Component接口的引用。
      • ConcreteDecorator類:擴展Decorator類,添加額外的功能。

      應用實例

      1. 孫悟空的72變:孫悟空(ConcreteComponent)通過變化(Decorator)獲得新的能力。
      2. 畫框裝飾畫:一幅畫(ConcreteComponent)可以通過添加玻璃(ConcreteDecorator)和畫框(ConcreteDecorator)來增強其展示效果。

      優點

      • 低耦合:裝飾類和被裝飾類可以獨立變化,互不影響。
      • 靈活性:可以動態地添加或撤銷功能。
      • 替代繼承:提供了一種繼承之外的擴展對象功能的方式。

      缺點

      • 復雜性:多層裝飾可能導致系統復雜性增加。

      使用建議

      • 在需要動態擴展功能時,考慮使用裝飾器模式。
      • 保持裝飾者和具體組件的接口一致,以確保靈活性。

      注意事項

      • 裝飾器模式可以替代繼承,但應謹慎使用,避免過度裝飾導致系統復雜。

      結構

      裝飾器模式包含以下幾個核心角色:

      • 抽象組件(Component):定義了原始對象和裝飾器對象的公共接口或抽象類,可以是具體組件類的父類或接口。
      • 具體組件(Concrete Component):是被裝飾的原始對象,它定義了需要添加新功能的對象。
      • 抽象裝飾器(Decorator):繼承自抽象組件,它包含了一個抽象組件對象,并定義了與抽象組件相同的接口,同時可以通過組合方式持有其他裝飾器對象。
      • 具體裝飾器(Concrete Decorator):實現了抽象裝飾器的接口,負責向抽象組件添加新的功能。具體裝飾器通常會在調用原始對象的方法之前或之后執行自己的操作。

      裝飾器模式通過嵌套包裝多個裝飾器對象,可以實現多層次的功能增強。每個具體裝飾器類都可以選擇性地增加新的功能,同時保持對象接口的一致性。

      實現

      我們將創建一個 Shape 接口和實現了 Shape 接口的實體類。然后我們創建一個實現了 Shape 接口的抽象裝飾類 ShapeDecorator,并把 Shape 對象作為它的實例變量。

      RedShapeDecorator 是實現了 ShapeDecorator 的實體類。

      DecoratorPatternDemo 類使用 RedShapeDecorator 來裝飾 Shape 對象。

      裝飾器模式的 UML 圖

      步驟 1

      創建一個接口:

      Shape.java

      public interface Shape { void draw(); }

      步驟 2

      創建實現接口的實體類。

      Rectangle.java

      public class Rectangle implements Shape { @Override public void draw() { System.out.println("Shape: Rectangle"); } }

      Circle.java

      public class Circle implements Shape { @Override public void draw() { System.out.println("Shape: Circle"); } }

      步驟 3

      創建實現了 Shape 接口的抽象裝飾類。

      ShapeDecorator.java

      public abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratedShape){ this.decoratedShape = decoratedShape; } public void draw(){ decoratedShape.draw(); } }

      步驟 4

      創建擴展了 ShapeDecorator 類的實體裝飾類。

      RedShapeDecorator.java

      public class RedShapeDecorator extends ShapeDecorator { public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); } @Override public void draw() { decoratedShape.draw(); setRedBorder(decoratedShape); } private void setRedBorder(Shape decoratedShape){ System.out.println("Border Color: Red"); } }

      步驟 5

      使用 RedShapeDecorator 來裝飾 Shape 對象。

      DecoratorPatternDemo.java

      public class DecoratorPatternDemo { public static void main(String[] args) { Shape circle = new Circle(); ShapeDecorator redCircle = new RedShapeDecorator(new Circle()); ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle()); //Shape redCircle = new RedShapeDecorator(new Circle()); //Shape redRectangle = new RedShapeDecorator(new Rectangle()); System.out.println("Circle with normal border"); circle.draw(); System.out.println("\nCircle of red border"); redCircle.draw(); System.out.println("\nRectangle of red border"); redRectangle.draw(); } }

      步驟 6

      執行程序,輸出結果:

      Circle with normal border
      Shape: Circle
      
      Circle of red border
      Shape: Circle
      Border Color: Red
      
      Rectangle of red border
      Shape: Rectangle
      Border Color: Red
      posted @ 2024-08-16 09:00  dengyantao  閱讀(29)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品tv久久久久久久| 99久久亚洲综合网精品| 欧美大胆老熟妇乱子伦视频| 久久av无码精品人妻出轨| 久久人人爽爽人人爽人人片av| 国产成人亚洲精品日韩激情| 久久久精品人妻一区二区三区 | 国产精品成人无码久久久| 亚洲成人av在线资源网| 午夜三级成人在线观看| 老司机午夜免费精品视频| 欧洲一区二区中文字幕| 九九热视频在线免费观看| 免费国产好深啊好涨好硬视频| 国产精品无码成人午夜电影| 国产漂亮白嫩美女在线观看| 日韩人妻无码精品久久| 亚洲中文字幕人妻系列| 国产又色又爽又黄的| 人妻中文字幕精品一页| 黑人好猛厉害爽受不了好大撑| 久久中文字幕av第二页| 中文无码乱人伦中文视频在线| 久久国产精品波多野结衣| 国产精品一区中文字幕| 中文激情一区二区三区四区| 最新亚洲av日韩av二区| 亚洲愉拍一区二区三区| 龙泉市| 国产精品SM捆绑调教视频| 116美女极品a级毛片| www夜插内射视频网站| 在线观看亚洲欧美日本| 亚洲综合一区二区三区不卡| 国产美女裸身网站免费观看视频| 国产亚洲一区二区三区四区| 无码射肉在线播放视频| 亚洲avav天堂av在线网爱情| 日韩中文字幕有码午夜美女| 成人影片一区免费观看| 口爆少妇在线视频免费观看|