详解设计模式:装饰器模式
裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設(shè)計(jì)模式中的一種結(jié)構(gòu)型設(shè)計(jì)模式。裝飾器模式 是指在不改變?cè)袑?duì)象的基礎(chǔ)之上,將功能附加到對(duì)象上,提供了比繼承更有彈性的替代方案(擴(kuò)展原有對(duì)象的功能)。
裝飾器模式 的核心是功能擴(kuò)展,使用裝飾器模式可以透明且動(dòng)態(tài)地?cái)U(kuò)展類的功能
~
本篇內(nèi)容包括:關(guān)于裝飾器模式、裝飾器實(shí)現(xiàn) Demo
文章目錄
- 一、關(guān)于裝飾器模式
- 1、關(guān)于裝飾器模式
- 2、關(guān)于裝飾器模式的構(gòu)成
- 3、關(guān)于裝飾器模式的UML
- 4、關(guān)于裝飾器模式的優(yōu)缺點(diǎn)
- 5、裝飾器模式、代理模式之間的區(qū)別
- 二、裝飾器實(shí)現(xiàn) Demo
- 1、Demo 實(shí)現(xiàn)
- 2、Demo 測(cè)試
一、關(guān)于裝飾器模式
1、關(guān)于裝飾器模式
裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設(shè)計(jì)模式中的一種結(jié)構(gòu)型設(shè)計(jì)模式。
裝飾器模式 是指在不改變?cè)袑?duì)象的基礎(chǔ)之上,將功能附加到對(duì)象上,提供了比繼承更有彈性的替代方案(擴(kuò)展原有對(duì)象的功能)。
裝飾器模式 的核心是功能擴(kuò)展,使用裝飾器模式可以透明且動(dòng)態(tài)地?cái)U(kuò)展類的功能
2、關(guān)于裝飾器模式的構(gòu)成
適配器模式一般包含四種角色:
3、關(guān)于裝飾器模式的UML
4、關(guān)于裝飾器模式的優(yōu)缺點(diǎn)
# 裝飾器模式的優(yōu)點(diǎn)
- 功能擴(kuò)展靈活,而不依賴?yán)^承;
- 可以對(duì)同一個(gè)對(duì)象進(jìn)行多種裝飾;
# 裝飾器模式的缺點(diǎn)
裝飾方式可能比較復(fù)雜,如果嵌套太多,容易造成代碼可讀性變差和出錯(cuò)。
5、裝飾器模式、代理模式之間的區(qū)別
對(duì)裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實(shí)現(xiàn)同一個(gè)接口。對(duì)代理模式來說,代理類(proxy class)和真實(shí)處理的類(real class)都實(shí)現(xiàn)同一個(gè)接口,他們之間的邊界確實(shí)比較模糊,兩者都是對(duì)類的方法進(jìn)行擴(kuò)展,具體區(qū)別如下:
二、裝飾器實(shí)現(xiàn) Demo
1、Demo 實(shí)現(xiàn)
# Component 抽象構(gòu)件角色
interface Component {public void operation(); }# ConcreteComponent 具體構(gòu)件角色
class ConcreteComponent implements Component {public ConcreteComponent() {System.out.println("創(chuàng)建具體構(gòu)件角色");}public void operation() {System.out.println("調(diào)用具體構(gòu)件角色的方法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("為具體構(gòu)件角色增加額外的功能addedFunction()");} }2、Demo 測(cè)試
public class Client {public static void main(String[] args) {Component p = new ConcreteComponent();p.operation();Component d = new ConcreteDecorator(p);d.operation();} }總結(jié)
以上是生活随笔為你收集整理的详解设计模式:装饰器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue axios跨域 Request
- 下一篇: java设计模式 23种设计模式和思想