ToB企服应用市场:ToB评测及商务社交产业平台

标题: iOS--工厂设计模式 [打印本页]

作者: 泉缘泉    时间: 2024-6-10 02:44
标题: iOS--工厂设计模式
设计模式的概念和意义

设计模式(Design Patterns)是一套被反复使用、代码设计经验的总结,一般与编程语言无关,是一套比较成熟的编程头脑。它重要解决的是在软件设计中反复出现的问题,并提供了一种解决方案。这些方案是在恒久软件开辟实践中逐步形成的,旨在提高代码的可重用性、可维护性和可扩展性。
在iOS开辟中,设计模式通常与面向对象编程(OOP)的概念相联合,通过类和对象来形貌问题域中的事物及其关系。设计模式将最佳实践封装成可复用的代码片断,使开辟者能够更快速、更高效地构建高质量的应用步伐。
设计模式的意义

类族模式

在之前的学习中,我们了解到了类族模式;这里的工厂设计模式和类族模式很像 ;
UIButton作为类族模式的例子

  1. UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];  
  2. [button setTitle:@"Click Me" forState:UIControlStateNormal];  
  3. [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];  
  4. [self.view addSubview:button];
复制代码
总结

通过类族模式,UIButton能够隐蔽其背后的实现细节,提供同一的公共接供词开辟者使用。这简化了开辟过程,提高了代码的可读性和可维护性。同时,由于体系框架内部可以根据须要动态选择并创建不同的子类实例,因此也提高了代码的机动性和可扩展性。
三种工厂设计模式

工厂设计模式重要分为以下三种,每种模式都有其特定的应用场景和优缺点:
简朴工厂模式(Simple Factory Pattern):


代码实例




上面创建了一个专门的工厂类来创建产物类,来实现隐蔽产物类的创建实现,其产物类都依照operation协议并展示接口,但终极只有工厂类的类方法袒露在外被人调用 ;

工厂方法模式(Factory Method Pattern):


代码实例


创建一个抽象类ShapeFactory作为核心工厂类,该类依照CreateFactory协议中声明的接口 ;
  1. #import <Foundation/Foundation.h>
  2. #import "CreateFactory.h"
  3. NS_ASSUME_NONNULL_BEGIN
  4. @interface ShapeFactory : NSObject <CreateFactory>
  5. @end
  6. NS_ASSUME_NONNULL_END
复制代码

由该抽象工厂类调用接口创建详细的产物工厂类 ;再由详细的产物工厂类创建产物对象 ;
  1. #import "ShapeFactory.h"
  2. NS_ASSUME_NONNULL_BEGIN
  3. @interface Factory01 : ShapeFactory
  4. - (id <Shape>)createProduct ;
  5. @end
  6. NS_ASSUME_NONNULL_END
复制代码
  1. #import "Factory01.h"
  2. #import "Product01.h"
  3. @implementation Factory01
  4. - (id <Shape> )createProduct {
  5.     return [[Product01 alloc] init];
  6. }
  7. @end
复制代码
抽象工厂模式(

Abstract Factory Pattern):

代码实例

起首定义两个产物类 ;依照并实现一个display接口 ;
  1. #import <Foundation/Foundation.h>
  2. NS_ASSUME_NONNULL_BEGIN
  3. @protocol display <NSObject>
  4. - (void)display ;
  5. @end
  6. NS_ASSUME_NONNULL_END
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "display.h"
  3. NS_ASSUME_NONNULL_BEGIN
  4. @interface FstButton : NSObject <display>
  5. - (void)display ;
  6. @end
  7. NS_ASSUME_NONNULL_END
  8. //
  9. #import "FstButton.h"
  10. @implementation FstButton
  11. - (void)display {
  12.     NSLog(@"1") ;
  13. }
  14. @end
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "display.h"
  3. NS_ASSUME_NONNULL_BEGIN
  4. @interface SedButton : NSObject <display>
  5. - (void)display ;
  6. @end
  7. NS_ASSUME_NONNULL_END
  8. //
  9. #import "SedButton.h"
  10. @implementation SedButton
  11. - (void)display  {
  12.     NSLog(@"2") ;
  13. }
  14. @end
复制代码
定义两个产物的详细工厂类;它们依照并实现协议中定义的createProduct接口 ;
  1. #import <Foundation/Foundation.h>
  2. #import "display.h"
  3. NS_ASSUME_NONNULL_BEGIN
  4. @protocol CreateProduct <NSObject>
  5. - (id <display>) createProduct ;
  6. @end
  7. NS_ASSUME_NONNULL_END
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "CreateProduct.h"
  3. #import "FstButton.h"
  4. NS_ASSUME_NONNULL_BEGIN
  5. @interface FstFactory : NSObject <CreateProduct>
  6. - (id <display>) createProduct ;
  7. @end
  8. NS_ASSUME_NONNULL_END
  9. //
  10. #import "FstFactory.h"
  11. @implementation FstFactory
  12. - (id <display>) createProduct {
  13.     return [[FstButton alloc] init];
  14. }
  15. @end
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "CreateProduct.h"
  3. #import "SedButton.h"
  4. NS_ASSUME_NONNULL_BEGIN
  5. @interface SedFactory : NSObject <CreateProduct>
  6. - (id <display>) createProduct ;
  7. @end
  8. NS_ASSUME_NONNULL_END
  9. //
  10. #import "SedFactory.h"
  11. @implementation SedFactory
  12. - (id <display>)createProduct {
  13.     return [[SedButton alloc] init];
  14. }
  15. @end
复制代码
定义一个超级工厂类来创建详细工厂类
  1. #import <Foundation/Foundation.h>
  2. #import "FstFactory.h"
  3. #import "SedFactory.h"
  4. NS_ASSUME_NONNULL_BEGIN
  5. @interface BaseFactory : NSObject
  6. + (id <CreateProduct>) createFactory : (NSString*) type ;
  7. @end
  8. NS_ASSUME_NONNULL_END
  9. //
  10. #import "BaseFactory.h"
  11. @implementation BaseFactory
  12. + (id <CreateProduct>) createFactory:(NSString *)type {
  13.     if ([type isEqualToString:@"1"]) {
  14.         return [[FstFactory alloc] init] ;
  15.     } else if ([type isEqualToString:@"2"]) {
  16.         return [[SedFactory alloc] init] ;
  17.     } else {
  18.         return nil;
  19.     }
  20. }
  21. @end
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4