1. 程式人生 > >初學《大話設計模式》——裝飾模式

初學《大話設計模式》——裝飾模式

一、概念

動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活

二、使用場景

當需要向已有功能動態地新增更多功能,或者當系統需要新功能的時候,是向舊類中新增新的程式碼,這些新的程式碼通常裝飾了原有類的核心職責或主要行為。裝飾著模式把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,當需要執行特殊行為時,客戶程式碼就可以在執行時根據需要有選擇的、按順序地使用裝飾功能包裝物件。

三、程式碼示例

程式共有7個類
這裡寫圖片描述

Person.java

package decorator;

public class Person {

    public
Person() { } private String name; public Person(String name) { super(); this.name = name; } public void Show() { System.out.println("裝飾的"+name ); } }

Finery.java

package decorator;

public class Finery extends Person{

    protected Person component;

    //打扮
public void Decorator(Person component) { this.component=component; } @Override public void Show() { if (component!=null) { component.Show(); } } }

BigTrouser.java

package decorator;

public class BigTrouser extends Finery{

    @Override
public void Show() { System.out.println("垮褲"); super.Show(); } }

LeaderShoes.java

package decorator;

public class LeaderShoes extends Finery{

    @Override
    public void Show() {
        System.out.println("皮鞋");
        super.Show();
    }
}

Sneakers.java

package decorator;

public class Sneakers extends Finery{

    @Override
    public void Show() {
        System.out.println("球鞋");
        super.Show();
    }
}

Tshirs.java

package decorator;

public class Tshirs extends Finery{

    @Override
    public void Show() {
        System.out.println("大T恤");
        super.Show();
    }
}

Main.java

package decorator;

import org.junit.Test;

public class Main {

    @Test
    public void test() {
        Person person=new Person("小菜");

        System.out.println("\n第一種裝扮:");
        Sneakers sneakers=new Sneakers();
        BigTrouser bigTrouser=new BigTrouser();
        Tshirs tshirs=new Tshirs();

        sneakers.Decorator(person);
        bigTrouser.Decorator(sneakers);
        tshirs.Decorator(bigTrouser);
        tshirs.Show();

        System.out.println("\n第二種裝扮:");
        Tshirs tshirs2=new Tshirs();
        LeaderShoes leaderShoes=new LeaderShoes();
        Sneakers sneakers2=new Sneakers();
        tshirs2.Decorator(person);
        leaderShoes.Decorator(tshirs2);
        sneakers2.Decorator(leaderShoes);
        sneakers2.Show();


    }
}

四、程式碼效果展示

第一種裝扮:
大T恤
垮褲
球鞋
裝飾的小菜

第二種裝扮:
球鞋
皮鞋
大T恤
裝飾的小菜

五、優點

裝飾模式的有點就是,把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類,這樣做更大的好處在於,有效地把類的核心職責和裝飾功能區分開,而且可以去除相關類重複的裝飾邏輯

相關推薦

大話設計模式--裝飾模式 C++簡單例子

span 例子 簡單例子 new pre virt != code decorator 裝飾模式在對象動態增加功能方面優於繼承,用裝飾模式替代繼承,比繼承更加靈活。 小菜扮靚第三版 class person { public: virtual void show(

大話設計模式——裝飾模式和代理模式(一)

區別 接口 需要 構圖 技術分享 開閉 tro 可能 code 1、是什麽? 裝飾模式:動態地給一個對象添加額外的職責。 代理模式:其他對象通過對象A去訪問對象B。 2、為什麽用? 裝飾模式:1、遵循開閉原則,盡量不去修改原有的類。2、裝飾對象一般都是添加額外的

大話設計模式--裝飾模式

裝飾模式:動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。 Component是定義了一個物件介面,可以給這些物件動態地新增職責,ConcreteComponent是定義了一個具體的物件,也可以給這些物件新增一些職責。Decorator,裝飾抽象類,繼承

大話設計模式裝飾模式

裝飾模式(Decorator Pattern)允許向一個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的一個包裝。 這種模式建立了一個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。

設計模式——裝飾模式

decorator text err span 方法 切換 rtu .text 指標 一、簡介 裝飾模式(Decorator)又名包裝器(Wrapper),屬於結構型模式的一種,采用遞歸的思想,用於包裝類,使其功能豐富。 例如:有一個統計圖表控件,可能需要有圖/表切換的功能

設計模式 - 裝飾模式

void 去除 ora () override collect fin app names 裝飾模式(Decorator):動態的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 1 using System; 2 using System.

大話設計之策略模式實現簡易收銀系統

收銀系統 計算方式 一直會變 今天 是滿300 返100 明天 可能 就是滿 300 返50 我們不可能 一直 去改程式 所以 我們還要 用到反射 來實現 動態的 更改 計算方式  這裡面我 們先建立一下xml檔案 程式碼如下 using System; using Syst

軟考設計模式——裝飾模式(C++)

裝飾模式就是在不改變原來介面的情況下,給類新增功能。 舉個例子,在遊戲裡玩一個英雄,可以拿裝備,拿的這些個裝備就相當於是在裝飾自己。 其實有一個訣竅,就是這些類裡有一個方法名字都一樣,然後這些類先從外到內,然後從裡面開始一層層向外巢狀呼叫,相當於一直給這個方法里加東西

C++設計模式——裝飾模式

前言 在實際開發時,你有沒有碰到過這種問題;開發一個類,封裝了一個物件的核心操作,而這些操作就是客戶使用該類時都會去呼叫的操作;而有一些非核心的操作,可能會使用,也可能不會使用;現在該怎麼辦呢? 將這些非核心的操作全部放到類中,這樣,一個類就包含了很多核心的操作和一些看似有關,但是又無關的操作;這就會

【程式設計素質】設計模式-裝飾模式(Decorator,包裝模式Wrapper)

1,概念 是動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 是以對客戶端透明的方式擴充套件物件的功能,換句話說,客戶端不會察覺到裝飾前與裝飾後有什麼不同。 在不

設計模式--裝飾模式

裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。 1.裝飾模式的結構 裝飾模式以對客戶透明的方式動態地給一個物件附加上更多的責任。換言之,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。裝飾模式可

java設計模式-裝飾模式

裝飾模式可以在不改變一個物件本身功能的基礎上給物件增加額外的新行為,在現實生活中,這種情況也到處存在,例如一張照片,我們可以不改變照片本身,給它增加一個相框,使得它具有防潮的功能,而且使用者可以根據需要給它增加不同型別的相框,甚至可以在一個小相框的外面再套一個大相框。裝飾模式

設計模式-裝飾模式

裝飾模式的UML類圖 你會發現,在裝飾模式中,除了對抽象介面的實現,更重要的還有對抽象介面的聚合。 裝飾模式一般適應於常為系統已有的功能動態的新增更多的功能。 1、將會更新的功能的進行抽象 package decorate_1; public interfa

設計模式(裝飾模式)

父類(飲料,價格) public abstract class Beverage {//飲料 public abstract String getDescription(); public abstract double cost(); } 子類(咖啡的) public class Coff

C++設計模式~裝飾模式(Decorator)

文章目錄 裝飾模式 程式碼舉例 decorator.h decorator.cpp main.cpp 再舉例 person.h main.cpp

java設計模式-裝飾模式

定義:裝飾(Decorator)模式又叫包裝模式。允許向一個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的一個包裝。通過一種對客戶端透明的方式來擴充套件物件的功能,是繼承關係的一個替代方案。 意圖:動態地給一個物件新增一些額外的職責。就增加功能來

設計模式-裝飾模式(DECORATOR)

定義 裝飾模式(DECORATOR):動態的給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。 類圖 component是一個介面物件,現在可以給這些介面物件動態的新增職責,concretecomponent是具體的實現類,也可以給他增加職責

設計模式——裝飾模式詳解

0. 前言寫在最前面,本人的設計模式類博文,建議先看博文前半部分的理論介紹,再看後半部分的例項分析,最後再返回來複習一遍理論介紹,這時候你就會發現我在重點處標紅的用心,對於幫助你理解設計模式有奇效哦~本

【奔跑的菜鳥】Java的設計模式——裝飾模式

Java中有許多設計模式,本片文章通過一個簡化的裝飾模式的程式碼,實現一個簡單的裝飾模式。 package com.java; public interface Component { public void doSomething(); } package com.j

設計模式:裝飾模式(Decorator )

定義與結構 裝飾模式(Decorator)也叫包裝器模式(Wrapper)。GOF 在《設計模式》一書中給出的定義為:動態地給一個物件新增一些額外的職責。就增加功能來說,Decorator 模式相比生成子類更為靈活。 讓我們來理解一下這句話。我們來設計“門”