適用場景,對不可修改的類進行擴充套件,比如說靜態庫 或系統的類等
使用思路: 1.先模擬出乙個被裝飾 類 功能一樣的類 2.建立 模擬類 的子類,對子類進行擴充套件。
**原物件
#import
@inte***ce gamepad : nsobject
/*** 上下左右操作
*/-(void)up;
-(void)down;
-(void)left;
-(void)right;
/*** 選擇與開始
*/-(void)select;
-(void)start;
/*** 按鈕abxy
*/-(void)comanda;
-(void)comandb;
-(void)comandx;
-(void)comandy;
建立出乙個和原物件一樣的類 然後建立乙個原物件 在同名方法中 呼叫 原物件的同名方法
#import
#import "gamepad.h"
@inte***ce gamepaddecorator : nsobject
/*** 上下左右操作
*/-(void)up;
-(void)down;
-(void)left;
-(void)right;
/*** 選擇與開始
*/-(void)select;
-(void)start;
/*** 按鈕abxy
*/-(void)comanda;
-(void)comandb;
-(void)comandx;
-(void)comandy;
#import "gamepaddecorator.h"
@inte***ce gamepaddecorator ()
@property(nonatomic,strong)gamepad *gamepad;
@end
@implementation gamepaddecorator
-(id)init
return self;
}-(void)up
-(void)down
-(void)left
-(void)right
-(void)select
-(void)start
-(void)comanda
-(void)comandb
-(void)comandx
-(void)comandy
3.對模擬出來的類進行子類化 並擴充套件新功能
#import "gamepaddecorator.h"
@inte***ce cheatgamepaddecorator : gamepaddecorator
-(void)cheat;
實現略ios中的擴充套件 類別
在類別中擴充套件屬性 這裡用到了 runtime
注意:在類別中千萬別重寫原有的方法,不然不管你引用沒引用,都會執行你重寫後的方法
#import "gamepad.h"
@inte***ce gamepad (coin)
@property(nonatomic,assign)nsuinteger coins;
#import "gamepad+coin.h"
#import
#import
@implementation gamepad (coin)
static const nsstring *_coinstr=@"_coinstr";
-(void)setcoins:(nsuinteger)coins
-(nsuinteger)coins
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...