美文网首页
iOS设计模式:装饰

iOS设计模式:装饰

作者: younger_times | 来源:发表于2017-03-01 10:07 被阅读29次

    视频资源-极客学院

    ps:感觉打的一手好广告啊,因为自己不太爱看视频,但这类又必须看才能明白。粘贴源代码是为了以后查阅方便,也注释了自己的理解。

    GamePad.h(Component)

    原生产厂家生产的游戏手柄

    #import <Foundation/Foundation.h>
    
    @interface GamePad : NSObject
    
    /**
    
     *  上下左右的操作
    
     */
    
    - (void)up;
    
    - (void)down;
    
    - (void)left;
    
    - (void)right;
    
    /**
    
     *  选择与开始的操作
    
     */
    
    - (void)select;
    
    - (void)start;
    
    /**
    
     *  按钮 A + B + X + Y
    
     */
    
    - (void)commandA;
    
    - (void)commandB;
    
    - (void)commandX;
    
    - (void)commandY;
    
    @end
    
    
    #import "GamePad.h"
    
    @implementation GamePad
    
    - (void)up {
    
        
    
        NSLog(@"up");
    
    }
    
    - (void)down {
    
        
    
        NSLog(@"down");
    
    }
    
    - (void)left {
    
        
    
        NSLog(@"left");
    
    }
    
    - (void)right {
    
        
    
        NSLog(@"right");
    
    }
    
    - (void)select {
    
        
    
        NSLog(@"select");
    
    }
    
    - (void)start {
    
        
    
        NSLog(@"start");
    
    }
    
    - (void)commandA {
    
        
    
        NSLog(@"commandA");
    
    }
    
    - (void)commandB {
    
        
    
        NSLog(@"commandB");
    
    }
    
    - (void)commandX {
    
        NSLog(@"commandX");
    
    }
    
    - (void)commandY {
    
        NSLog(@"commandY");
    
    }
    
    @end
    
    

    GamePadDecorator.h (Decorator)

    装饰者,几乎和GamePad一样的操作

    
    /**
    
     *  上下左右的操作
    
     */
    
    - (void)up;
    
    - (void)down;
    
    - (void)left;
    
    - (void)right;
    
    /**
    
     *  选择与开始的操作
    
     */
    
    - (void)select;
    
    - (void)start;
    
    /**
    
     *  按钮 A + B + X + Y
    
     */
    
    - (void)commandA;
    
    - (void)commandB;
    
    - (void)commandX;
    
    - (void)commandY;
    
    
    #import "GamePadDecorator.h"
    
    @interface GamePadDecorator ()
    
    @property (nonatomic, strong) GamePad *gamePad; #引用
    
    @end
    
    @implementation GamePadDecorator
    
    - (instancetype)init {
    
        
    
        self = [super init];
    
        if (self) {
    
        
    
            self.gamePad = [[GamePad alloc] init]; #初始化时,实例化GamePad
    
        }
    
        
    
        return self;
    
    }
    
    - (void)up {
    
        [self.gamePad up];
    
    }
    
    - (void)down {
    
        [self.gamePad down];
    
    }
    
    - (void)left {
    
        [self.gamePad left];
    
    }
    
    - (void)right {
    
        [self.gamePad right];
    
    }
    
    - (void)select {
    
        [self.gamePad select];
    
    }
    
    - (void)start {
    
        [self.gamePad start];
    
    }
    
    - (void)commandA {
    
        [self.gamePad commandA];
    
    }
    
    - (void)commandB {
    
        [self.gamePad commandB];
    
    }
    
    - (void)commandX {
    
        [self.gamePad commandX];
    
    }
    
    - (void)commandY {
    
        [self.gamePad commandY];
    
    }
    

    GamePadDecorator.h(ConcreteDecoratorA)

    装饰者的拓展,可以添加新方法

    
    #import "GamePadDecorator.h"
    
    @interface CheatGamePadDecorator : GamePadDecorator
    
    - (void)cheat;
    
    @end
    
    
    #import "CheatGamePadDecorator.h"
    
    @implementation CheatGamePadDecorator
    
    - (void)cheat {
    
        [self up];
    
        [self down];
    
        [self up];
    
        [self down];
    
        [self left];
    
        [self right];
    
        [self left];
    
        [self right];
    
        [self commandA];
    
        [self commandB];
    
        [self commandA];
    
        [self commandB];
    
    }
    
    

    iOS的category进行扩展

    GamePad+Cheat.h

    #import "GamePad.h"
    
    @interface GamePad (Cheat)
    
    - (void)cheat;
    
    @end
    
    #import "GamePad+Cheat.h"
    
    @implementation GamePad (Cheat)
    
    - (void)cheat {
    
        
    
        [self up];
    
        [self down];
    
        [self up];
    
        [self down];
    
        [self left];
    
        [self right];
    
        [self left];
    
        [self right];
    
        [self commandA];
    
        [self commandB];
    
        [self commandA];
    
        [self commandB];
    
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:iOS设计模式:装饰

          本文链接:https://www.haomeiwen.com/subject/dxrqgttx.html