详解设计模式:装饰器模式
裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設計模式中的一種結構型設計模式。裝飾器模式 是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈性的替代方案(擴展原有對象的功能)。
裝飾器模式 的核心是功能擴展,使用裝飾器模式可以透明且動態地擴展類的功能
~
本篇內容包括:關于裝飾器模式、裝飾器實現 Demo
文章目錄
- 一、關于裝飾器模式
- 1、關于裝飾器模式
- 2、關于裝飾器模式的構成
- 3、關于裝飾器模式的UML
- 4、關于裝飾器模式的優缺點
- 5、裝飾器模式、代理模式之間的區別
- 二、裝飾器實現 Demo
- 1、Demo 實現
- 2、Demo 測試
一、關于裝飾器模式
1、關于裝飾器模式
裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設計模式中的一種結構型設計模式。
裝飾器模式 是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈性的替代方案(擴展原有對象的功能)。
裝飾器模式 的核心是功能擴展,使用裝飾器模式可以透明且動態地擴展類的功能
2、關于裝飾器模式的構成
適配器模式一般包含四種角色:
3、關于裝飾器模式的UML
4、關于裝飾器模式的優缺點
# 裝飾器模式的優點
- 功能擴展靈活,而不依賴繼承;
- 可以對同一個對象進行多種裝飾;
# 裝飾器模式的缺點
裝飾方式可能比較復雜,如果嵌套太多,容易造成代碼可讀性變差和出錯。
5、裝飾器模式、代理模式之間的區別
對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現同一個接口。對代理模式來說,代理類(proxy class)和真實處理的類(real class)都實現同一個接口,他們之間的邊界確實比較模糊,兩者都是對類的方法進行擴展,具體區別如下:
二、裝飾器實現 Demo
1、Demo 實現
# Component 抽象構件角色
interface Component {public void operation(); }# ConcreteComponent 具體構件角色
class ConcreteComponent implements Component {public ConcreteComponent() {System.out.println("創建具體構件角色");}public void operation() {System.out.println("調用具體構件角色的方法operation()");} }# Decorator 抽象裝飾角色
abstract class Decorator implements Component {private Component component;public Decorator(Component component) {this.component = component;}public void operation() {component.operation();} }# ConcreteDecorator 具體裝飾角色
class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}public void operation() {super.operation();addedFunction();}public void addedFunction() {System.out.println("為具體構件角色增加額外的功能addedFunction()");} }2、Demo 測試
public class Client {public static void main(String[] args) {Component p = new ConcreteComponent();p.operation();Component d = new ConcreteDecorator(p);d.operation();} }總結
以上是生活随笔為你收集整理的详解设计模式:装饰器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue axios跨域 Request
- 下一篇: Docker删除镜像和容器命令