溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java結構型設計模式之裝飾模式怎么實現(xiàn)

發(fā)布時間:2023-03-31 14:08:01 來源:億速云 閱讀:109 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“Java結構型設計模式之裝飾模式怎么實現(xiàn)”,在日常操作中,相信很多人在Java結構型設計模式之裝飾模式怎么實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java結構型設計模式之裝飾模式怎么實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

介紹

意圖:動態(tài)地給一個對象添加一些額外的職責。就增加功能來說,裝飾模式相比生成子類更靈活。

主要解決:我們擴展一個類常使用繼承方式實現(xiàn),由于繼承為類引入靜態(tài)特征,并且隨著擴展功能的增多,子類會越來越膨脹。

如何使用:在不想增加很多子類的情況下擴展。

如何解決:將具體功能職責劃分,同時繼承裝飾者模式。

關鍵代碼:

1. Component 類充當抽象角色,不應該具體實現(xiàn)。

2. 修飾類引用合繼承 Component 類,具體擴展類重寫父類方法。

使用場景:

1. 擴展一個類的功能。

2. 動態(tài)增加功能,動態(tài)撤銷。

實現(xiàn)

創(chuàng)建一個 Shape 接口合實現(xiàn)了 Shape 接口的實體類。然后再創(chuàng)建一個實現(xiàn)了 Shape 接口的抽象裝飾類 ShapeDecorator,并把 Shape 對象作為它的實例變量。RedShapeDecorator 是實現(xiàn)了 ShapeDecorator 的實體類。DecoratorPatternDemo 類使用 RedShapeDecorator 來裝飾 Shape 對象。

Java結構型設計模式之裝飾模式怎么實現(xiàn)

步驟1:

public interface Shape{
    void draw();
}

步驟2:

public class Rectangle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Rectangle");
    }
}
public class Cricle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Circle");
    }
}

步驟3:

public abstract class ShapeDecorator implements Shape{
    private Shape shape; // 持有一個 Shape 對象
    public ShapeDecorator(Shape shape){
        this.shape = shape;
    }
    public void draw(){
        shape.draw();// TODO 根據(jù)傳進來的具體 Shape 對象,調用對應的 draw 方法
    }
}

步驟4:

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

步驟5

public class DecoratorPatterndDemo{
    public static void main(String args[]){
        //TODO 面向抽象層編程
        // 普通的Circle
        Shape circle = new Circle();
        System.out.println("Circle with normal Border");        
        circle.darw();
        // 紅色邊界的 Circle
        ShapeDecorator redCircle = new RedShapeDecorator(new Circle); 
        System.out.println("Circle of red Border");
        redCircle.draw();
        // 紅色邊界的 Rectangle
        ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangel):
        System.out.println("Rectangle of red Border");
        redRectangle.draw();
    }
}

優(yōu)缺點

優(yōu)點:裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。

缺點:多層裝飾比較復雜。

到此,關于“Java結構型設計模式之裝飾模式怎么實現(xiàn)”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI