程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Decorator模式中遭遇繼承與聚合的沖突

Decorator模式中遭遇繼承與聚合的沖突

編輯:JAVA編程入門知識

一:背景:Decorator

*Decorator 常被翻譯成"裝飾",我覺得翻譯成"油漆工"更形象點,油漆工(decorator)是用來刷油漆的,那麼被刷油漆的對象我們稱decoratee.這兩種實體在Decorator 模式中是必須的。

*Decorator 定義:

動態給一個對象添加一些額外的職責,就象在牆上刷油漆.使用Decorator 模式相比用生成子類方式達到功能的擴充顯得更為靈活。

*為什麼使用Decorator?

我們通常可以使用繼續來實現功能的拓展,假如這些需要拓展的功能的種類很繁多,那麼勢必生成很多子類,增加系統的復雜性,同時,使用繼續實現功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就確定了,是靜態的。

使用Decorator 的理由是:這些功能需要由用戶動態決定加入的方式和時機.Decorator 提供了"即插即用"的方法,在運行期間決定何時增加何種功能。

*對於該模式,初步歸納為

1.基本功能為接口

2.Decorator參數為接口本身也為接口以便為下一個Decorator的參數

3.基本功能類實現接口 並作為Decorator構造函數的參數,以便在此基礎上添加新功能

4.額外功能由Decorator中的數據結構處理

二:問題

這是一段Decorator設計模式的實現例子如下:

基本功能:Counter類

需要添加的功能

1:上限控制

2:下限控制

import java.io.*;

class Counter{

private int value;

public Counter(int v){

System.out.println("init me here in The Counter with value!");

value=v;

}

public Counter(Counter cc){

System.out.println("init me here in The Counter with class!");

value=cc.value;

}

public int read_value(){

System.out.println("read me here The value is:"+value);

System.out.println("read me here in The Counter!");

return value;

}

public void increment(){

System.out.println("increment me here in The Counter !");

value++;

}

public void decrement(){

System.out.println("decrement me here in The Counter !");

value--;

}

}

class Decorator extends Counter

{

Counter counter;

public Decorator(Counter c)

{

super(c);

System.out.println("init me here with class Decorator!");


 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved