設計模式練習:Decorate模式

來源:互聯網
上載者:User

  關於這個裝飾模式,其實還有很多地方還要學習,還要繼續去模仿一些情況,轉換為As可以適用的應用程式。因為要掌握到23種常見的模式,並不是一兩天的事情,還需要在實踐當中更加運用。

 

今天練習一個設計模式,至於對不對,看不清楚了呵呵。(辯證看待這些文章)

 

基本的思想是: 寫一武器基類,派生一個子類。 為了實現裝飾效果,我們寫一個寶石類,寶石類分三種寶石,紅寶石,藍寶石,綠寶石。

 

通過寶石的不同,能夠返回不同的屬性值。

 

 

這樣的話,我們可以通過寶石類實現對武器對象進行裝飾。裝飾技巧是在於實現前者的功能基礎上進行裝配。簡單來說,在實現裝飾對象過程,首先實現的是裝飾對象最初的功能。隨後才是其他的要裝飾的功能。

 

 //裝飾武器某一個對象
  public function Decorate(Myweapon:Weapon):void
  {
   this.Myweapon=Myweapon;
  }

 

在裝飾類(寶石類)當中,我們首先調用的是裝飾對象的抽象類別對象實現調用自身的方法,這樣做不需要指出具體哪一個子類。我們可以對程式進行擴充。有助於日後修改系統。

 

 

 Weapon類,武器類

package<br />{<br />public class Weapon<br />{<br />//private var _weapon:Iweapon;<br />public function Weapon( )<br />{<br />//this._weapon=_weapon;<br />}<br />public function getDescription():String<br />{<br />return null;<br />}<br />public function getValue():Number<br />{<br />return 0;</p><p>}<br />}<br />}

 

寶石類:

package<br />{<br />public class Diablo extends Weapon<br />{<br />//寶石的基類,為武器Weapon對象裝飾<br />private var Myweapon:Weapon;<br />public function Diablo()<br />{</p><p>}<br />//裝飾武器某一個對象<br />public function Decorate(Myweapon:Weapon):void<br />{<br />this.Myweapon=Myweapon;<br />}<br />override public function getDescription():String<br />{<br />var str:String;<br />if (this.Myweapon!=null)<br />{</p><p>str= Myweapon.getDescription();<br />}<br />return str;<br />}<br />override public function getValue():Number<br />{<br />var num:Number;<br />if (this.Myweapon!=null)<br />{</p><p>num= Myweapon.getValue();</p><p>}<br />return num;<br />}<br />}<br />}

紅寶石類:

 

package<br />{<br /> public class RedDiablo extends Diablo<br /> {<br /> private var value:Number=10;<br />public function RedDiablo()<br />{</p><p>}</p><p>override public function getDescription():String<br />{</p><p> return super.getDescription()+"安裝紅寶石";<br />}</p><p>override public function getValue():Number<br />{<br /> return super.getValue()+this.value;<br />}<br />}</p><p>}

藍寶石類:

 

package<br />{<br />public class BlueDiablo extends Diablo<br />{<br />private var value:Number=20;<br />public function BlueDiablo()<br />{</p><p>}<br />override public function getDescription():String<br />{</p><p>return super.getDescription()+"安裝藍寶石";<br />}<br />override public function getValue():Number<br />{</p><p>return super.getValue()+this.value;<br />}<br />}<br />}

綠寶石類:

 

package<br />{<br /> public class GreenDiablo extends Diablo<br /> {<br /> private var value:Number=30;<br />public function GreenDiablo()<br />{</p><p>}</p><p>override public function getDescription():String<br />{<br /> return super.getDescription()+"安裝綠寶石";<br />}</p><p>override public function getValue():Number<br />{<br />return super.getValue()+this.value;<br />}<br />}</p><p>}

武器A

 

package<br />{<br />public class WeaponA extends Weapon<br />{</p><p>public function WeaponA()<br />{</p><p>}<br />override public function getDescription():String<br />{<br />return "武器A";<br />}<br />override public function getValue():Number<br />{<br />return 0;</p><p>}<br />}<br />}

 

測試:

package<br />{<br />import flash.display.Sprite;<br />import flash.events.*;</p><p>public class Test extends Sprite<br />{<br />public function Test()<br />{<br />var weapon:WeaponA=new WeaponA();<br />var reddiable:RedDiablo=new RedDiablo();<br />var bluediable:BlueDiablo=new BlueDiablo();</p><p>reddiable.Decorate(weapon);//裝飾<br />bluediable.Decorate(reddiable);<br />var str:String=bluediable.getDescription();<br />var power:Number=bluediable.getValue();<br />trace(str);<br />trace(power);</p><p>}<br />}<br />}

 

這些程式當中還可以繼續深入,但是作為練習已經可以。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.