欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java設(shè)計模式筆記之裝飾模式

 更新時間:2019年04月01日 08:34:07   作者:孟凡勇  
這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式筆記之裝飾模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、裝飾模式的定義

裝飾模式是一種比較常見的模式,其定義如下:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(動態(tài)地給一個對象添加額外的職責(zé)。就增加功能來說,裝飾模式相比生成子類更為靈活)

裝飾模式的通用類圖如圖:

Component抽象構(gòu)件:Component是一個接口或者是抽象類,就是定義我們最核心的對象,也就是最原始的對象

ConcreteComponent具體構(gòu)件:ConcreteComponent是最核心、最原始、最基本的接口或抽象類的實現(xiàn),你要裝飾的就是它

Decorator裝飾角色:一般一個抽象類,做什么用呢?實現(xiàn)接口或抽象方法,這里面不一定有抽象的方法,在它的屬性里必然有一個private變量指向Component抽象構(gòu)件

具體裝飾角色:ConcreteDecoratorA和ConcreteDecoratorB是兩個具體的裝飾類,你要把你最核心的、最原始的、最基本的東西裝飾成其他東西

抽象構(gòu)件代碼:

public abstract class Component {
  //抽象的方法
  public abstract void operate();
}

具體構(gòu)件代碼:

public class ConcreteComponent extends Component {
  @Override
  public void operate() {
    System.out.println("do somthing");
  }
}

抽象裝飾者:

public abstract class Decorator extends Component {
  private Component component = null;
 
  public Decorator(Component component) {
    this.component = component;
  }
 
  @Override
  public void operate() {
    this.component.operate();
  }
}

具體裝飾類:

public class ConcreteDecorator1 extends Decorator {
  public ConcreteDecorator1(Component component) {
    super(component);
  }
 
  private void method1() {
    System.out.println("method1 修飾");
  }
 
  @Override
  public void operate() {
    this.method1();
    super.operate();
  }
}
public class ConcreteDecorator2 extends Decorator {
  public ConcreteDecorator2(Component component) {
    super(component);
  }
 
  private void method2() {
    System.out.println("method2 修飾");
  }
 
  @Override
  public void operate() {
    this.method2();
    super.operate();
  }
}

場景類:

public class Client {
  public static void main(String args[]) {
    Component component = new ConcreteComponent();
    //第一次修飾
    component = new ConcreteDecorator1(component);
    //第二次修飾
    component = new ConcreteDecorator2(component);
    //修飾后運行
    component.operate();
  }
}

二、裝飾的優(yōu)缺點和使用場景

優(yōu)點:

裝飾類與被裝飾類可以獨立發(fā)展,而不會相互耦合。換句話說,Component類無需知道Decorator類,Decorator類是從外部擴展Component類的功能,而Decorator也不用知道具體的構(gòu)件

裝飾模式是繼承關(guān)系的一個替代方案。我們看裝飾類Decorator,不管裝飾多少層,返回的還是Component,實現(xiàn)的還是is-a的關(guān)系

裝飾模式可以動態(tài)地擴展一個實現(xiàn)類的功能

缺點:

對于裝飾模式記住一點就夠了:多層的裝飾是比較復(fù)雜的,就像剝洋蔥,剝到了最后才發(fā)現(xiàn)是最里層的裝飾出現(xiàn)了問題,因此盡量減少裝飾類的數(shù)量,以便降低系統(tǒng)的復(fù)雜度。

使用場景:

需要擴展一個累的功能,或者給一個類增加附加功能
需要動態(tài)地給一個對象增加功能,這些功能可以再動態(tài)的撤銷
需要為一批兄弟累進行改裝或假裝功能,當(dāng)然首選裝飾模式

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法

    淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法

    MyBatisPlus進行數(shù)據(jù)庫操作時,我們經(jīng)常會遇到處理日期時間類型的需求,本文主要介紹了淺談MyBatisPlus中LocalDateTime引發(fā)的一些問題和解決辦法,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • java藍(lán)橋杯試題

    java藍(lán)橋杯試題

    這篇文章主要介紹了java藍(lán)橋杯試題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • java http連接池的實現(xiàn)方式(帶有失敗重試等高級功能)

    java http連接池的實現(xiàn)方式(帶有失敗重試等高級功能)

    這篇文章主要介紹了java http連接池的實現(xiàn)方式(帶有失敗重試等高級功能),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Spring Boot 深入分析AutoConfigurationImportFilter自動化條件配置源碼

    Spring Boot 深入分析AutoConfigurationImportFilter自動化條件

    這篇文章主要分析了Spring Boot AutoConfigurationImportFilter自動化條件配置源碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-07-07
  • 淺析spring定時器的使用

    淺析spring定時器的使用

    這篇文章主要介紹了淺析spring定時器的使用,幫助大家更好的理解和學(xué)習(xí)spring框架,感興趣的朋友可以了解下
    2020-10-10
  • Spring Cloud Gateway 緩存區(qū)異常問題及解決方案

    Spring Cloud Gateway 緩存區(qū)異常問題及解決方案

    最近在測試環(huán)境spring cloud gateway突然出現(xiàn)了異常,接下來通過本文給大家介紹Spring Cloud Gateway 緩存區(qū)異常問題解決方案,需要的朋友可以參考下
    2024-06-06
  • springboot之配置雙kafka全過程

    springboot之配置雙kafka全過程

    這篇文章主要介紹了springboot之配置雙kafka全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 詳解Spring Aop實例之xml配置

    詳解Spring Aop實例之xml配置

    本篇文章主要介紹了詳解Spring Aop實例之xml配置,使用xml可以對aop進行集中配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Spring整合Mybatis思路梳理總結(jié)

    Spring整合Mybatis思路梳理總結(jié)

    mybatis-plus是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Spring Security基于散列加密方案實現(xiàn)自動登錄功能

    Spring Security基于散列加密方案實現(xiàn)自動登錄功能

    為了提高項目的用戶體驗,我們可以在項目中添加自動登錄功能,當(dāng)然也要給用戶提供退出登錄的功能。接下來學(xué)習(xí)下Spring Security基于散列加密方案實現(xiàn)自動登錄功能,一起看看吧
    2021-09-09

最新評論