Java設計模式——裝飾模式

来源:http://www.cnblogs.com/zengxiaoliang/archive/2017/12/22/8084710.html
-Advertisement-
Play Games

轉載自:http://blog.csdn.net/xu__cg/article/details/53024490 抽象構件 具體構建 裝飾角色 具體裝飾角色 客戶端 ...


轉載自:http://blog.csdn.net/xu__cg/article/details/53024490

抽象構件

public interface CarInterface {
    void move();
}

具體構建

public class Car implements CarInterface {
    public void move() {
        System.out.println("路上行駛");
    }
}

裝飾角色

public class SuperCar implements CarInterface {
    protected CarInterface car;

    public SuperCar(CarInterface car) {
        this.car = car;
    }

    public void move() {
        car.move();
    }
}

具體裝飾角色

/**
 * 飛行汽車
 */
public class FlyCar extends SuperCar {
    public FlyCar(CarInterface car) {
        super(car);
    }

    public void fly() {
        System.out.println("空中行駛汽車");
    }

    @Override
    public void move() {
        super.move();
        fly();
    }
}

/**
 * 水上汽車
 */
public class WaterCar extends SuperCar {
    public WaterCar(CarInterface car) {
        super(car);
    }

    public void swim() {
        System.out.println("水上行駛汽車");
    }

    @Override
    public void move() {
        super.move();
        swim();
    }
}

客戶端

public class Client {
    public static void main(String[] args) {
        System.out.println("------普通汽車,正常行駛-----");
        Car car = new Car();
        car.move();

        System.out.println("------增加新功能,飛行------");
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();

        System.out.println("------新增加功能,水上行駛-----");
        WaterCar waterCar = new WaterCar(car);
        waterCar.move();

        System.out.println("-----新增加兩個功能,飛行與水上行駛-----");
        WaterCar waterCar2 = new WaterCar(flyCar);
        waterCar2.move();
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉自腳本之家: 這篇文章主要介紹了JS去掉字元串前後空格或去掉所有空格的用法,需要的朋友可以參考下: 代碼如下: 說明: 如果使用jQuery直接使用$.trim(str)方法即可,str表示要去掉前後所有空格的字元串。 2、 去掉字元串中所有空格(包括中間空格,需要設置第2個參數為:g) 3、現在 ...
  • 其實很簡單,就是title這個屬性:(字元多餘的剪切,title顯示完整的字元) 下麵是代碼: 以下是起因: 任務:頁面上顯示個備註.某某某. 某某某:知道了(不就是怎麼用textarea 填上去的怎麼顯示。我還要textarea就行) 過了一天.... 出現了一個問題:這個textarea文本域怎 ...
  • js中的不同的數據類型之間的比較轉換規則如下: 1. 對象和布爾值比較 對象和布爾值進行比較時,對象先轉換為字元串,然後再轉換為數字,布爾值直接轉換為數字 2. 對象和字元串比較 對象和字元串進行比較時,對象轉換為字元串,然後兩者進行比較。 3. 對象和數字比較 對象和數字進行比較時,對象先轉換為字 ...
  • 本文分為三個部分 一、JS數字精度丟失的一些典型問題 1. 兩個簡單的浮點數相加 1 0.1 + 0.2 != 0.3 // true 1 0.1 + 0.2 != 0.3 // true 1 0.1 + 0.2 != 0.3 // true 1 0.1 + 0.2 != 0.3 // true 0 ...
  • Angular 是 Google 親兒子,React 是 Facebook 小正太,那咱為啥偏偏選擇了 Vue 下手,一句話,Vue 是咱見過的最對脾氣的 MVVM 框架。之前也使用過 knockout,angular,react 這些框架,但都沒有讓咱產生 follow 的衝動。直到見到 Vue,... ...
  • 1.基礎知識點 1.1 webpack 是一個現代 JavaScript 應用程式的模塊打包器(module bundler)。當 webpack 處理應用程式時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程式需要的每個模塊,然後將所有這些模塊打包成一個或多個 b ...
  • 統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:mye ...
  • 一、模板方法定義 定義一個操作中的某種演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類在不改變一個演算法結構的前提下,對這些步驟進行個性化定義。 二、模板方法程式構成 在模板方法設計模式中,存在一個父類,其中包括兩類方法:模板方法和步驟方法。 模板方法,即實現某種演算法的方法步驟。而這些步驟都 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...