iOS设计模式 - 装饰

简介:

iOS设计模式 - 装饰

 

原理图

 

说明

1. cocoa框架本身实现了装饰模式(category的方式实现了装饰模式)

2. 装饰模式指的是动态的给一个对象添加一些额外的职责,相对于继承子类来说,装饰模式更加灵活

*3. 本人仅仅实现了最简单的装饰模式,装饰器类是一个具体的类,非抽象类

 

源码

https://github.com/YouXianMing/iOS-Design-Patterns



//
//  GamePlay.h
//  DecoratorPattern
//
//  Created by YouXianMing on 15/8/1.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface GamePlay : NSObject

/**
 *  游戏币的数量
 */
@property (nonatomic) NSInteger coin;

/**
 *  上下左右的操作
 */
- (void)up;
- (void)down;
- (void)left;
- (void)right;

/**
 *  选择与开始的操作
 */
- (void)select;
- (void)start;

/**
 *  按钮 A + B 的操作
 */
- (void)commandA;
- (void)commandB;

@end


//
//  GamePlay.m
//  DecoratorPattern
//
//  Created by YouXianMing on 15/8/1.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "GamePlay.h"

@implementation GamePlay

- (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");
}


@end


//
//  DecoratorGamePlay.h
//  DecoratorPattern
//
//  Created by YouXianMing on 15/8/1.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "GamePlay.h"

@interface DecoratorGamePlay : NSObject

@property (nonatomic) NSInteger coin;

- (void)up;
- (void)down;
- (void)left;
- (void)right;
- (void)select;
- (void)start;
- (void)commandA;
- (void)commandB;

#pragma mark - 以下为装饰对象新添加的功能

/**
 *  剩余几条命
 */
@property (nonatomic, readonly) NSInteger  lives;

/**
 *  作弊 (上下上下左右左右ABAB)
 */
- (void)cheat;

@end


//
//  DecoratorGamePlay.m
//  DecoratorPattern
//
//  Created by YouXianMing on 15/8/1.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "DecoratorGamePlay.h"

@interface DecoratorGamePlay ()

@property (nonatomic, strong) GamePlay  *gamePlay;

@end

@implementation DecoratorGamePlay

#pragma mark - 初始化
- (instancetype)init {
    
    self = [super init];
    if (self) {
    
        // 装饰对象包含一个真实对象的引用
        self.gamePlay = [GamePlay new];
    }
    
    return self;
}

#pragma mark - 让真实对象的引用执行对应的方法
- (void)up {

    [_gamePlay up];
}

- (void)down {

    [_gamePlay down];
}

- (void)left {

    [_gamePlay left];
}

- (void)right {

    [_gamePlay right];
}

- (void)select {

    [_gamePlay select];
}

- (void)start {

    [_gamePlay start];
}

- (void)commandA {

    [_gamePlay commandA];
}

- (void)commandB {

    [_gamePlay commandB];
}

#pragma mark - 装饰器新添加的方法
- (void)cheat {

    [_gamePlay up];
    [_gamePlay down];
    [_gamePlay up];
    [_gamePlay down];
    [_gamePlay left];
    [_gamePlay right];
    [_gamePlay left];
    [_gamePlay right];
    [_gamePlay commandA];
    [_gamePlay commandB];
    [_gamePlay commandA];
    [_gamePlay commandB];
}

@synthesize lives = _lives;
- (NSInteger)lives {

    // 相关处理逻辑
    return 10;
}

@end

分析

以下是装饰模式实现细节对照图

 


目录
相关文章
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
266 0
|
设计模式 搜索推荐 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
536 1
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
445 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
302 0
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
279 0
|
6月前
|
设计模式
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
|
6月前
|
设计模式
装饰者设计模式(一)
装饰者设计模式(一)
|
设计模式 iOS开发 UED
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
275 0
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(5)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(5)
274 0
|
设计模式 Java
装饰与适配:解析Java设计模式中的装饰器模式和适配器模式
在软件开发领域,设计模式是一组经过实践验证的最佳实践方法,用于解决常见问题。装饰器模式和适配器模式分别是结构型设计模式中的两个重要成员,它们在不同的场景中发挥着关键作用。本文将深入了解装饰器模式和适配器模式的内涵,以及它们在Java中的实际应用。
120 0