盈彩体育注册(中国)有限公司 | 您所在的位置:网站首页 › 盈彩体育注册(中国)有限公司 › IOS面试题(设计模式相关) |
OC面试题目合集地址 问题1: ios什么是简单工厂设计模式简单工厂模式 Simple Factory Pattern :专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。结合例子看一下: 例子工厂 Factory:角色, 接受客户端Client 的请求,负责创建相应的产品对象。抽象产品 Abstract Product: 角色, 工厂模式所创建对象的父类或拥有的共同接口。具体产品 ConcreteProduct: 对象, 工厂模式所创建的对象例子代码结合代码看一下: 例子SimpleFactory.h #import #import "Cola.h"#import "CocaCola.h"#import "PepsiCola.h"typedef NS_ENUM(NSInteger, SimpleFactoryColeType) { SimFacCocaCola, SimFacPepsiCola};NS_ASSUME_NONNULL_BEGIN@interface SimpleFactory : NSObject// 工厂:接受客户端的请求,通过请求负责创建相应的产品对象。+ (Cola *)factoryProductCola:(SimpleFactoryColeType)colaType;@endNS_ASSUME_NONNULL_ENDSimpleFactory.m #import "SimpleFactory.h"@implementation SimpleFactory// 工厂:接受客户端的请求,通过请求负责创建相应的产品对象。+ (Cola *)factoryProductCola:(SimpleFactoryColeType)colaType { // 通常枚举, if也可 switch (colaType) { case SimFacCocaCola: return [CocaCola new]; case SimFacPepsiCola: return [PepsiCola new]; default: return nil; break; } }@endCocaCola #import "CocaCola.h"@implementation CocaCola- (void)sayCola { NSLog(@"sayCocaCola");}@endPepsiCola #import "PepsiCola.h"@implementation PepsiCola- (void)sayCola { NSLog(@"sayPepsiCola");}@end运行结果由此可以看出简单工厂的优缺点: 优点: 工厂类/方法集中管理, 实现代码简洁性根据约定好的参数就可以获取所需要的对象,而不需要知道其创建的细节。减少了系统的耦合度client 客户端只需要知道具体产品类所对应的参数即可,减少开发者的记忆成本。缺点: 在产品类型较多时,有可能造成工厂逻辑过于复杂具体产品只能为固定的父类上进行延伸, 难以扩展如果业务上添加新产品的话,就需要修改工厂类原有的判断逻辑,这其实是违背了开闭原则的。问题2: ios什么是工厂设计模式工厂模式 Factory Method Pattern :工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,即通过不同的工厂子类来创建不同的产品对象。例子其实工厂模式具有OOP的多态性,将工厂和产品都抽象出一个基类,在基类中定义统一的接口,然后在具体的工厂中创建具体的产品。比起简单工厂,工厂方法就不需要判断,耦合度低了不少。 例子代码Factory.h #import #import "Cola.h"#import "CocaCola.h"#import "PepsiCola.h"NS_ASSUME_NONNULL_BEGIN@interface Factory : NSObject@end@interface CocaColaFactory : Factory+ (Cola *)productCocaCola;@end@interface PepsiColaFactory : Factory+ (Cola *)productPepsiCola;@endFactory.m #import "Factory.h"@implementation Factory@end@implementation CocaColaFactory+ (Cola *)productCocaCola { Cola *cola = [[CocaCola alloc] init]; return cola;}@end@implementation PepsiColaFactory+ (Cola *)productPepsiCola { Cola *cola = [[PepsiCola alloc] init]; return cola; }@endCocaCola #import "CocaCola.h"@implementation CocaCola- (void)sayCola { NSLog(@"sayCocaCola");}@endPepsiCola #import "PepsiCola.h"@implementation PepsiCola- (void)sayCola { NSLog(@"sayPepsiCola");}@end例子由此可以看出工厂模式的优缺点: 优点: 满足了类之间的层次关系, 降低了工厂类的内聚无须修改客户端和其他的具体工厂和具体产品,只添加一个具体工厂和与其对应的具体产品就可以了,符合开闭原则。缺点: 工厂模式每次需要一个新的产品,就需要新建一个具体工厂来生成新的产品当多个产品时, 类的个数将成对增加,增加复杂度。问题3: ios什么是抽象工厂模式抽象工厂模式 Abstract Factory Pattern: 一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象, 也可以理解成一个超级工厂创建其他工厂。提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。其中产品族: 是指位于不同产品等级结构,功能相关联的产品组成的家族。例如:百事瓶盖、百事瓶子、百事饮料水组成一个家族,可口瓶盖、可口瓶子、可口饮料水组成另一个家族。而这两个家族有三个产品等级:瓶盖、瓶子、饮料水。一个等级结构是由相同的结构的产品组成。 例子例子代码AbstractFactory.h #import #import "ColaThemeFactory.h"typedef NS_ENUM(NSInteger, AbstractFactoryColeType) { CocaThemeFactoryType, PepsiThemeFactoryType};NS_ASSUME_NONNULL_BEGIN@interface AbstractFactory : NSObject+ (ColaThemeFactory *)factoryWithModel:(AbstractFactoryColeType)modelType;@endNS_ASSUME_NONNULL_ENDAbstractFactory.m #import "AbstractFactory.h"#import "ColaThemeFactory.h"#import "PepsiThemeFactory.h"@implementation AbstractFactory+ (ColaThemeFactory *)factoryWithModel:(AbstractFactoryColeType)modelType { if (modelType == PepsiThemeFactoryType) { return [[PepsiThemeFactory alloc] init]; }else if (modelType == CocaThemeFactoryType) { return [[ColaThemeFactory alloc] init]; } return nil; }@endColaThemeFactory.h #import NS_ASSUME_NONNULL_BEGIN@interface ColaThemeFactory : NSObject- (void)productCola;- (void)productCap;- (void)productSparklingWater;- (void)productBottle;@endNS_ASSUME_NONNULL_ENDColaThemeFactory.m #import "ColaThemeFactory.h"@implementation ColaThemeFactory- (void)productCola { [self productBottle]; [self productSparklingWater]; [self productCap];}@endPepsiThemeFactory 与CocaThemeFactory一样只是打印文字不同, 只写一个, 详细可见评论区demo PepsiThemeFactory.h #import "ColaThemeFactory.h"NS_ASSUME_NONNULL_BEGIN@interface PepsiThemeFactory : ColaThemeFactory- (void)productCap;- (void)productSparklingWater;- (void)productBottle;@endNS_ASSUME_NONNULL_ENDPepsiThemeFactory.m #import "PepsiThemeFactory.h"@implementation PepsiThemeFactory- (void)productCap { NSLog(@"生产百事瓶盖");}- (void)productSparklingWater { NSLog(@"生产百事饮料水");}- (void)productBottle { NSLog(@"生产百事瓶子");}@end例子抽象工厂模式工厂模式派生多个具体工厂类派生多个具体产品类可以产生多个系列的产品一个工厂只能产生一种产品必须修改父类的接口才能支持新的产品子类化创建者并重载工厂方法以创建新产品由此可以看出抽象工厂模式的优缺点: 优点: 分离接口和实现使切换产品族变得容易, 同时一个产品族中的多个对象被设计成一起,保证客户端始终只使用同一个产品族中的对象。缺点: 整体复杂度高产品族扩展困难,需要修改抽象工厂的接口 |
CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1 |