美文网首页
设计模式

设计模式

作者: 鬼才冯三郎 | 来源:发表于2023-10-29 17:13 被阅读0次

在Objective-C中,有许多常用的设计模式可以提高代码的可维护性、可扩展性和重用性。以下是一些常见的Objective-C设计模式:

  1. MVC(Model-View-Controller)模式:MVC是一种常见的架构模式,将应用程序的逻辑分为模型(Model)、视图(View)和控制器(Controller)三个部分。模型负责数据存储和业务逻辑,视图负责用户界面展示,而控制器则管理用户交互和协调模型与视图之间的通信。

  2. 单例模式(Singleton Pattern):单例模式确保类只有一个实例,并提供一个全局访问点。通过使用静态方法或类方法,可以在整个应用程序中共享该实例,常用于管理共享资源或全局状态。

  3. 委托模式(Delegate Pattern):委托模式通过定义协议(Protocol)和实现委托类(Delegate Class)来实现对象之间的通信和事件传递。一个对象将特定的任务委托给另一个对象来完成,委托类会实现相应的协议方法来响应事件和完成任务。

  4. 工厂模式(Factory Pattern):工厂模式使用工厂对象来封装对象的创建过程,从而实现对象的实例化。工厂模式可以隐藏对象的具体实现细节,并提供一个统一的接口来创建相关的对象。

  5. 观察者模式(Observer Pattern):观察者模式定义了一种对象之间的一对多依赖关系,当一个对象的状态发生变化时,它的所有依赖对象都会得到通知和更新。通过使用NotificationCenter和KVO(Key-Value Observing)机制,可以方便地实现观察者模式。

  6. 适配器模式(Adapter Pattern):适配器模式将一个类的接口转换为客户端所期望的另一个接口,从而使原本不兼容的类可以一起工作。通过创建适配器类,可以将不同类的接口进行适配和转换。

  7. 责任链模式(Chain of Responsibility Pattern):责任链模式将请求的发送者和接收者进行解耦,将多个接收者组成一个链,请求会依次被传递下去,直到有一个接收者能够处理为止。

以上仅是Objective-C中的一些常见设计模式,根据具体的项目需求和场景选择合适的设计模式来优化代码结构和逻辑。

OC 单例模式举例:
在Objective-C中,可以使用以下方式实现单例模式:

  1. GCD 方式(线程安全):
+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    static MyClass *sharedInstance = nil;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[MyClass alloc] init];
    });
    return sharedInstance;
}
  1. 静态变量方式(非线程安全):
+ (instancetype)sharedInstance {
    static MyClass *sharedInstance = nil;
    if (sharedInstance == nil) {
        sharedInstance = [[super allocWithZone:NULL] init];
    }
    return sharedInstance;
}

+ (id)allocWithZone:(struct _NSZone *)zone {
    return [self sharedInstance];
}

- (id)copyWithZone:(struct _NSZone *)zone {
    return self;
}

这些示例代码中,sharedInstance方法返回一个共享的单例实例。在GCD方式中,使用dispatch_once函数确保实例只被创建一次。在静态变量方式中,通过检查静态变量是否为nil来决定是否创建实例。

无论你选择哪种实现方式,单例模式都能确保在应用程序中只有一个实例。
OC 工厂模式举例
在Objective-C中,可以使用工厂模式来封装对象的创建逻辑,以提供统一的接口来创建相关的对象。以下是一个示例,展示如何使用工厂模式创建不同类型的产品:

首先,定义一个抽象的产品协议(Protocol):

@protocol Product <NSObject>

- (void)use;

@end

然后,定义具体的产品类实现产品协议:

@interface ConcreteProductA : NSObject <Product>

@end

@implementation ConcreteProductA

- (void)use {
    NSLog(@"Using ConcreteProductA");
}

@end

@interface ConcreteProductB : NSObject <Product>

@end

@implementation ConcreteProductB

- (void)use {
    NSLog(@"Using ConcreteProductB");
}

@end

接下来,定义一个工厂类用于创建产品实例:

@interface ProductFactory : NSObject

+ (id<Product>)createProductWithType:(NSString *)type;

@end

@implementation ProductFactory

+ (id<Product>)createProductWithType:(NSString *)type {
    if ([type isEqualToString:@"A"]) {
        return [[ConcreteProductA alloc] init];
    } else if ([type isEqualToString:@"B"]) {
        return [[ConcreteProductB alloc] init];
    }
    
    return nil; // 可以根据需要返回特定类型的默认产品或抛出异常
}

@end

在客户端代码中,可以使用工厂类创建具体的产品实例:

id<Product> productA = [ProductFactory createProductWithType:@"A"];
id<Product> productB = [ProductFactory createProductWithType:@"B"];

[productA use]; // 输出:Using ConcreteProductA
[productB use]; // 输出:Using ConcreteProductB

通过工厂模式,客户端代码无需直接依赖具体的产品类,而是通过工厂类进行产品的创建。这样可以更灵活地扩展和替换产品的实现,同时遵循了开闭原则。
OC 适配器模式
在Objective-C中,适配器模式可以用于将一个类的接口转换为客户端所期望的另一个接口,从而使原本不兼容的类可以一起工作。以下是一个示例,展示如何使用适配器模式:

首先,定义一个目标接口(Target Interface):

@protocol TargetProtocol <NSObject>

- (void)request;

@end

然后,实现一个需要适配的类(Adaptee Class):

@interface AdapteeClass : NSObject

- (void)specialRequest;

@end

@implementation AdapteeClass

- (void)specialRequest {
    NSLog(@"AdapteeClass: Special Request");
}

@end

创建一个适配器类(Adapter Class),将适配器类实现目标接口,并引用需要适配的类实例:

@interface AdapterClass : NSObject <TargetProtocol>

@property (nonatomic, strong) AdapteeClass *adaptee;

- (instancetype)initWithAdaptee:(AdapteeClass *)adaptee;

@end

@implementation AdapterClass

- (instancetype)initWithAdaptee:(AdapteeClass *)adaptee {
    self = [super init];
    if (self) {
        self.adaptee = adaptee;
    }
    return self;
}

- (void)request {
    [self.adaptee specialRequest];
}

@end

在客户端代码中,可以使用适配器来调用目标接口的方法,而无需直接操作需要适配的类:

AdapteeClass *adaptee = [[AdapteeClass alloc] init];
AdapterClass *adapter = [[AdapterClass alloc] initWithAdaptee:adaptee];
[adapter request];

通过适配器模式,客户端代码可以通过使用适配器来调用目标接口的方法。适配器内部封装了需要适配的类的实例,并将其方法转换为目标接口可调用的形式,从而实现了类之间的接口转换。这样可以在不修改现有类代码的情况下,实现类之间的兼容和协同工作。

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

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