魔法牌裡的模式(Bridge) (轉)
不知道各位有沒有玩過魔法牌.基本分也兩種.一種稱為卡.另一種稱為輔助卡片.
攻擊卡負責攻擊.而輔助卡則負責效果.例如加強攻擊效果.或者減弱敵方攻擊效果等等
這樣看了.實現部分是就是所謂的攻擊卡.而抽象部分就是效果卡.他們有聯絡可是聯絡
並非平行的聯絡.也就是說並不象如同劍士可以派生出魔法劍士,光明劍士等這樣的情況
攻擊效果卡.和攻擊卡本身的聯絡不是靜態的可以透過繼承來完成的.而是需要動態的
繫結.這就很明顯要使用抽象類和介面了.那麼也就引出了設計Bridge.那麼下面
我就來模擬魔法牌中的效果.假設我有兩張劍士卡片.分別是魔法劍士和光明劍士.和
兩張效果卡.一張是加攻擊效果400 另一張是減弱攻擊效果300.並且是動態的建立
效果的攻擊卡之間的聯絡.
具體實現:
//攻擊卡
public interface IAttackCode{
int Pow{get;set};
ImpactCode Impact{get;};
void effect();
}
//效果卡行為介面
public interface IImpactCode{
IAttackCode Attack{get;}
void effect();
}
下面我們就來正式實現具體卡片之間的聯絡.
//魔法劍士
public MagicKnightCode :IAttackCode{
IImpactCode impact;
int pow;
public MagicKnightCode () {
impact=ImpSingleton.impact;
pow=1800;
}
public IImpactCode Impact{
get{return this.impact;}
}
public int Pow{
get{return pow;}
set{pow=value;}
}
public void effect(){
Console.WriteLine("魔法劍士的攻擊力"+pow);
}
}
//光明劍士
public SunKnightCode :IAttackCode{
IImpactCode impact;
int pow;
public SunKnightCode () {
impact=ImpSingleton.impact;
pow=2000;
}
public IImpactCode Impact{
get{return this.impact;}
}
public int Pow{
get{return pow;}
set{pow=value;}
}
public void effect(){
impact.effect();
Console.WriteLine("光明劍士的攻擊力"+pow);
}
}
接下來是效果卡的具體實現.
//攻擊力加400
public class AddActtack : IImpactCode{
IActtackCode acttack;
public AddActtack(){
acttack=ImpSingleton.Acttack;
}
public IActtackCode Acttack{
return acttack;
}
public void effect{
impact.effect();
acttack.Pow+=400;
}
}
//攻擊力減弱300
public class SubtrationActtack:IImpactcode{
IActtackCode acttack;
public SubtrationActtack(){
acttack=ImpSingleton.Acttack;
}
public IActtackCode Acttack{
return acttack;
}
public void effect{
acttack.Pow-=300;
}
}
下面是這個模式的最後一步.我將建立一個Singleton模式.來完成兩者的對接工作
因為必須保證卡片在每回合必須是單一的.所以才用Singleton模式
public class ImpSingleton{
prviate static IImptactCode Imptack;
prviate static IActtackCode Acttack;
public ImpSingleton(IImptactCode im IActtackCode ac){
this.Imptack = im;
this.Acttack = ac;
}
public static IImpatackCode imptack{
get{retrun Imptack;}
}
public static IActtack acttack{
get{retrun Acttack;}
}
public void effect(){
this.Acttack.effect();
}
}
public class Client {
public static int Main(string[] args){
//為魔法劍士使用加攻擊力的效果卡
ImpSingleton Is=
new ImpSingleton(new MagicKnightCode(),new AddActtack());
Is.effect();
//為光明劍士使用減弱效果卡
Is=null
Is=
new ImpSingleton(new SunKnightCode(),new SubtrationActtack());
Is.effect();
return 0;
}
}
由此可以看出Bridge模式把兩個需要動態繫結的是很有用的.如果在中
就可以把資料和實際的業務邏輯分開.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998916/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Bridge模式模式
- Java橋模式(Bridge模式)Java模式
- 設計模式----Bridge模式設計模式
- 設計模式 - Bridge 橋模式設計模式
- 從重構的角度學習bridge設計模式 (轉)設計模式
- 橋接模式(Bridge)橋接模式
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 類爆炸之Bridge模式模式
- 設計模式的征途—8.橋接(Bridge)模式設計模式橋接
- 設計模式(Design Patterns)筆記之三:Bridge (轉)設計模式筆記
- 你好BANQ,請教Bridge模式模式
- c++涉及模式 橋接模式(bridge Pattern)C++模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- C#設計模式系列:橋接模式(Bridge)C#設計模式橋接
- JAVA設計模式之 橋接模式【Bridge Pattern】Java設計模式橋接
- 設計模式--橋接模式Bridge(結構型)設計模式橋接
- 設計模式(五)橋接模式Bridge == Pointer To Implementation設計模式橋接
- [用設計模式鍛鍊C#系列]之Singleton、Bridge (轉)設計模式C#
- C#設計模式(8)——橋接模式(Bridge Pattern)C#設計模式橋接
- [分享]Unix下的“魔法兔仔”(轉)
- 從重構的角度學習bridge設計模式設計模式
- 我所理解的設計模式(C++實現)——橋模式(Bridge Pattern)設計模式C++
- __bridge--- __bridge_retained--- __bridge_transferAI
- 阿什裡德培訓模式(轉載)模式
- 魔法轉換 (2千字)
- 不用JDBC:ODBC bridge直接操作Access 資料庫 (轉)JDBC資料庫
- __bridge - 橋接橋接
- 數字標牌蘊含增值服務新模式模式
- Oracle埃裡森冀望改寫軟體銷售模式(轉)Oracle模式
- 細數JDK裡的設計模式JDK設計模式
- 大魔頭,哪裡跑,看劍(魔法轉換1.5破解記錄,新鮮出爐) (3千字)
- Araneid 蜘蛛紙牌遊戲原始碼 (轉)遊戲原始碼
- 神奇的Cookie互通魔法Cookie
- 2.2 橋接 Bridge橋接
- 魔法逝
- 談 C++17 裡的 Observer 模式 - 4 - 訊號槽模式C++Server模式
- [iOS]深入理解__bridge-OC物件與C++物件的引用轉換iOS物件C++