亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解java裝飾模式(Decorator Pattern)

 更新時(shí)間:2016年04月01日 16:18:25   作者:碼農(nóng)教程  
這篇文章主要為大家詳細(xì)介紹了java裝飾模式Decorator Pattern,這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝,對(duì)裝飾器模式感興趣的小伙伴們可以參考一下

一、裝飾器模式(Decorator Pattern)

允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。

這種模式創(chuàng)建了一個(gè)裝飾類,用來(lái)包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

我們通過(guò)下面的實(shí)例來(lái)演示裝飾器模式的使用。其中,我們將把一個(gè)形狀裝飾上不同的顏色,同時(shí)又不改變形狀類。

二、實(shí)現(xiàn)
我們將創(chuàng)建一個(gè) Shape 接口和實(shí)現(xiàn)了 Shape 接口的實(shí)體類。然后我們創(chuàng)建一個(gè)實(shí)現(xiàn)了 Shape 接口的抽象裝飾類ShapeDecorator,并把 Shape 對(duì)象作為它的實(shí)例變量。

RedShapeDecorator 是實(shí)現(xiàn)了ShapeDecorator 的實(shí)體類。

DecoratorPatternDemo,我們的演示類使用 RedShapeDecorator 來(lái)裝飾 Shape 對(duì)象。

步驟 1
創(chuàng)建一個(gè)接口。

Shape.java

public interface Shape {
  void draw();
}

步驟 2
創(chuàng)建實(shí)現(xiàn)接口的實(shí)體類。

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
創(chuàng)建實(shí)現(xiàn)了 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
創(chuàng)建擴(kuò)展自 ShapeDecorator 類的實(shí)體裝飾類。

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 來(lái)裝飾 Shape 對(duì)象。

DecoratorPatternDemo.java

public class DecoratorPatternDemo {
  public static void main(String[] args) {
 
   Shape circle = new Circle();
 
   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
驗(yàn)證輸出。

Circle with normal border
Shape: Circle

Circle of red border
Shape: Circle
Border Color: Red

Rectangle of red border
Shape: Rectangle
Border Color: Red

希望本文所述對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java使用wait()和notify()線程間通訊的實(shí)現(xiàn)

    java使用wait()和notify()線程間通訊的實(shí)現(xiàn)

    Java 線程通信是將多個(gè)獨(dú)立的線程個(gè)體進(jìn)行關(guān)聯(lián)處理,使得線程與線程之間能進(jìn)行相互通信,本文就介紹了java使用wait()和notify()線程間通訊的實(shí)現(xiàn),感興趣的可以了解一下
    2023-09-09
  • 深入解析java HashMap實(shí)現(xiàn)原理

    深入解析java HashMap實(shí)現(xiàn)原理

    這篇文章主要介紹了深入解析java HashMap實(shí)現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Java基于遞歸解決全排列問(wèn)題算法示例

    Java基于遞歸解決全排列問(wèn)題算法示例

    這篇文章主要介紹了Java基于遞歸解決全排列問(wèn)題算法,結(jié)合實(shí)例形式分析了Java使用遞歸算法解決全排列問(wèn)題的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • 超級(jí)詳細(xì)的Java安裝教程(Mac版)

    超級(jí)詳細(xì)的Java安裝教程(Mac版)

    Java是一種廣泛使用的編程語(yǔ)言,可用于開(kāi)發(fā)各種類型的應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于Mac系統(tǒng)下Java安裝的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題(推薦)

    SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題(推薦)

    這篇文章主要介紹了SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題,本文給大家介紹的非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Spring Boot使用yml格式進(jìn)行配置的方法

    Spring Boot使用yml格式進(jìn)行配置的方法

    很多springboot項(xiàng)目使用的是yml格式,主要目的是方便對(duì)讀懂其他人的項(xiàng)目,下面小編通過(guò)本文給大家分享Spring Boot使用yml格式進(jìn)行配置的方法,需要的朋友參考下吧
    2018-04-04
  • Java關(guān)鍵字instanceof用法及實(shí)現(xiàn)策略

    Java關(guān)鍵字instanceof用法及實(shí)現(xiàn)策略

    instanceof 運(yùn)算符是用來(lái)在運(yùn)行時(shí)判斷對(duì)象是否是指定類及其父類的一個(gè)實(shí)例。這篇文章主要介紹了Java關(guān)鍵字instanceof用法解析,需要的朋友可以參考下
    2020-08-08
  • JAVA十大排序算法之快速排序詳解

    JAVA十大排序算法之快速排序詳解

    這篇文章主要介紹了java中的快速排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java對(duì)象轉(zhuǎn)json JsonFormat注解

    Java對(duì)象轉(zhuǎn)json JsonFormat注解

    這篇文章主要介紹了Java對(duì)象轉(zhuǎn)json JsonFormat注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 解析Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法

    解析Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法

    MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架,這篇文章主要介紹了Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法,需要的朋友可以參考下
    2016-08-08

最新評(píng)論