真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭

本篇文章為大家展示了怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、甘谷網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為甘谷等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

一、模式定義

裝飾者模式,是在不改變原類文件和使用繼承的情況下,動(dòng)態(tài)擴(kuò)展一個(gè)對象功能,它是通過創(chuàng)建一個(gè)包裝對象,也就是裝飾來包裝真實(shí)的對象。

裝飾對象和真實(shí)對象有相同接口,這樣客戶端對象就可以和真實(shí)對象相同方式和裝飾對象交互。

裝飾對象包含一個(gè)真實(shí)對象的引用。

二、模式舉例

1. 模式分析

我們借用黑心商販制做染色饅頭案例說明這一模式。

 怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭

2. 裝飾者模式靜態(tài)類圖

 怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭

3. 代碼示例

3.1 創(chuàng)建饅頭接口——IBread

package com.demo.abs;
/**
 * 饅頭加工接口
 *
 * @author
 *
 */
public interface IBread {
  // 準(zhǔn)備材料
  public void prepair();
  // 和面
  public void kneadFlour();
  // 蒸饅頭
  public void steamed();
  /**
   * 加工饅頭方法
   */
  public void process();
}

3.2 正常饅頭實(shí)現(xiàn)——NormalBread

package com.demo.abs;
/**
 * 正常饅頭的實(shí)現(xiàn)
 *
 * @author
 *
 */
public class NormalBread implements IBread {
  // 準(zhǔn)備材料
  public void prepair() {
    System.out.println("準(zhǔn)備面粉、水以及發(fā)酵粉...");
  }
  // 和面
  public void kneadFlour() {
    System.out.println("和面...");
  }
  // 蒸饅頭
  public void steamed() {
    System.out.println("蒸饅頭...香噴噴的饅頭出爐了!");
  }
  /**
   * 加工饅頭方法
   */
  public void process() {
    // 準(zhǔn)備材料
    prepair();
    // 和面
    kneadFlour();
    // 蒸饅頭
    steamed();
  }
}

3.3 創(chuàng)建抽象裝飾者——AbstractBread

package com.demo.decorator;
import com.demo.abs.IBread;
/**
 * 抽象裝飾者
 *
 * @author
 *
 */
public abstract class AbstractBread implements IBread {
  // 存儲(chǔ)傳入的IBread對象
  private final IBread bread;
  public AbstractBread(IBread bread) {
    this.bread = bread;
  }
  // 準(zhǔn)備材料
  public void prepair() {
    this.bread.prepair();
  }
  // 和面
  public void kneadFlour() {
    this.bread.kneadFlour();
  }
  // 蒸饅頭
  public void steamed() {
    this.bread.steamed();
  }
  // 加工饅頭方法
  public void process() {
    prepair();
    kneadFlour();
    steamed();
  }
}

3.4 創(chuàng)建染色劑裝飾者——CornDecorator

package com.demo.decorator;
import com.demo.abs.IBread;
/**
 * 染色的玉米饅頭
 *
 * @author
 *
 */
public class CornDecorator extends AbstractBread {
  // 構(gòu)造方法
  public CornDecorator(IBread bread) {
    super(bread);
  }
  // 黑心商販 開始染色了
  public void paint() {
    System.out.println("添加檸檬黃的著色劑...");
  }
  // 重載父類的和面方法
  @Override
  public void kneadFlour() {
    // 在面粉中加入 染色劑 之后才開始和面
    this.paint();
    // 和面
    super.kneadFlour();
  }
}

3.5 創(chuàng)建甜蜜素裝飾者——SweetDecorator

package com.demo.decorator;
import com.demo.abs.IBread;
/**
 * 甜蜜素饅頭
 *
 * @author
 *
 */
public class SweetDecorator extends AbstractBread {
  // 構(gòu)造方法
  public SweetDecorator(IBread bread) {
    super(bread);
  }
  // 黑心商販 開始添加甜蜜素
  public void paint() {
    System.out.println("添加甜蜜素...");
  }
  // 重載父類的和面方法
  @Override
  public void kneadFlour() {
    // 在面粉中加入 甜蜜素 之后才開始和面
    this.paint();
    // 和面
    super.kneadFlour();
  }
}

3.6 生產(chǎn)甜玉米饅頭——Client

package com.demo;
import com.demo.abs.IBread;
import com.demo.abs.NormalBread;
import com.demo.decorator.CornDecorator;
import com.demo.decorator.SweetDecorator;
/**
 * 客戶端應(yīng)用程序
 *
 * @author
 *
 */
public class Client {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // 生產(chǎn)裝飾饅頭
    System.out.println("\n====開始裝飾饅頭!??!");
    // 創(chuàng)建普通的正常饅頭實(shí)例
    // 這是我們需要包裝(裝飾)的對象實(shí)例
    IBread normalBread = new NormalBread();
    // 下面就開始 對正常饅頭進(jìn)行裝飾了?。?!
    // 使用甜蜜素裝飾饅頭
    normalBread = new SweetDecorator(normalBread);
    // 使用檸檬黃的著色劑裝飾饅頭
    normalBread = new CornDecorator(normalBread);
    // 生產(chǎn)饅頭信息
    normalBread.process();
    System.out.println("====裝飾饅頭結(jié)束?。?!");
  }
}

4. 運(yùn)行結(jié)果

====開始裝飾饅頭!?。?br/>準(zhǔn)備面粉、水以及發(fā)酵粉...
添加檸檬黃的著色劑...
添加甜蜜素...
和面...
蒸饅頭...香噴噴的饅頭出爐了!
====裝飾饅頭結(jié)束?。?!

三、該模式設(shè)計(jì)原則

1 封閉變化部分
2 “開一閉"原則
3 面向抽象編程
4 優(yōu)先使用組合,而非繼承

四、使用場合

1. 當(dāng)我們需要為某個(gè)現(xiàn)有對象動(dòng)態(tài)增加一個(gè)新功能或職責(zé)時(shí),可以考慮使用裝飾者模式。

2. 當(dāng)某個(gè)對象的職責(zé)經(jīng)常發(fā)生變化或經(jīng)常需要?jiǎng)討B(tài)增加職責(zé),避免為了適應(yīng)這樣的變化而增加繼承子類擴(kuò)展的方式,因?yàn)檫@種方式會(huì)造成子類膨脹速度過快,難以控制,此時(shí)可以使用裝飾者模式。

五、裝飾者模式靜態(tài)類圖

 怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭

java基本數(shù)據(jù)類型有哪些

Java的基本數(shù)據(jù)類型分為:1、整數(shù)類型,用來表示整數(shù)的數(shù)據(jù)類型。2、浮點(diǎn)類型,用來表示小數(shù)的數(shù)據(jù)類型。3、字符類型,字符類型的關(guān)鍵字是“char”。4、布爾類型,是表示邏輯值的基本數(shù)據(jù)類型。

上述內(nèi)容就是怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:怎么在Java中利用裝飾者模式實(shí)現(xiàn)染色饅頭
分享鏈接:http://weahome.cn/article/pjhgip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部