工厂模式

工厂模式

概括

工厂模式分为类工厂方法,简单工厂,工厂,抽象工厂。

类工厂方法

类工厂方法我们常用,优点是可以快速创建对象。

简单工厂模式
  1. 什么是简单工厂模式好处是什么
    有一个抽象产品,该产品有个行为。没有实现这个行为。有两个具体产品继承于该抽象产品,并且实现这个行为。有个工厂根据传入的枚举负责生产该抽象产品(实际上是具体产品。这里是多态)。
    该模式的好处是开闭,即对内扩展是开放的,对外修改是关闭的。

  2. 模式图
    在这里插入图片描述

  3. 实现代码

/** 产品 **/
//Map
@interface Map : NSObject
- (void)showCitys;
@end

@implementation Map
- (void)showCitys{
    
}
@end

//BaiduMap
@interface BaiduMap : Map

@end

@implementation BaiduMap
- (void)showCitys{
    NSLog(@"百度地图显示城市");
}
@end

//GoogleMap
@interface GoogleMap : Map

@end

@implementation GoogleMap
- (void)showCitys{
    NSLog(@"谷歌地图显示城市");
}

/** 工厂 **/
//FactoryMap
typedef NS_ENUM(NSUInteger, MapType) {
    BaiduMapType,
    GoogleMapType,
};

@interface FactoryMap : NSObject
+ (Map *)creatMap:(MapType)type;
@end

@implementation FactoryMap
+ (Map *)creatMap:(MapType)type{
    Map *map = nil;
    if (type == BaiduMapType) {
        map = [[BaiduMap alloc] init];
    } else {
        map = [[GoogleMap alloc] init];
    }
    return map;
}
@end

/** 调用 **/
- (void)viewDidLoad {
    [super viewDidLoad];
   
    Map *baiduMap = [FactoryMap creatMap:BaiduMapType];
    [baiduMap showCitys];
    
    Map *googleMap = [FactoryMap creatMap:GoogleMapType];
    [googleMap showCitys];
}
工厂模式
  1. 什么是工厂模式,工厂模式的好处是什么
    有一个抽象产品,该产品有个行为。没有实现这个行为。有两个具体产品继承于该抽象产品,并且实现这个行为。有个抽象工厂负责生产该抽象产品,定义了创建该抽象产品的接口与实现。有两个工厂分别继承于该抽象工厂,并分别重写创建产品的方法,分别创建自己的具体产品。
    该模式的好处是开闭,即对内扩展是开放的,对外修改是关闭的。

  2. 模式图

在这里插入图片描述
3. 实现代码

/** 产品 **/
//Map
@interface Map : NSObject
- (void)showCitys;
@end

@implementation Map
- (void)showCitys{
   
}
@end

//BaiduMap
@interface BaiduMap : Map

@end

@implementation BaiduMap
- (void)showCitys{
   NSLog(@"百度地图显示城市");
}
@end

//GoogleMap
@interface GoogleMap : Map

@end

@implementation GoogleMap
- (void)showCitys{
   NSLog(@"谷歌地图显示城市");
}

/** 工厂 **/
//MapFactory
@interface MapFactory : NSObject
+ (Map *)createMap;
@end

@implementation MapFactory
+ (Map *)createMap{
   return [[Map alloc] init];
}
@end

//BaiduMapFactory
@interface BaiduMapFactory : MapFactory

@end

@implementation BaiduMapFactory
+ (Map *)createMap{
   return [[BaiduMap alloc] init];
}
@end

//GoogleFactory
@interface GoogleFactory : MapFactory

@end

@implementation GoogleFactory
+ (Map *)createMap{
   return [[GoogleMap alloc] init];
}
@end

/** 调用 **/
- (void)viewDidLoad {
   [super viewDidLoad];
  
   Map *baiduMap = [BaiduMapFactory createMap];
   [baiduMap showCitys];
   
   Map *googleMap = [GoogleMapFactory createMap];
   [googleMap showCitys];
}
抽象工厂
  1. 什么是抽象工厂,有什么优点
    有两个抽象产品,两个抽象产品都分别有个行为。没有实现这个行为。有四个具体产品分别成对继承两个抽象产品,并且实现了对应父类的行为。有个抽象工厂负责生产这两个抽象产品,定义了创建该抽象产品的接口与实现。有两个工厂分别继承于该抽象工厂,并分别重写父类中两个创建产品的方法,分别创建自己的具体产品。 该模式的好处是开闭,即对内扩展是开放的,对外修改是关闭的。

  2. 模式图

在这里插入图片描述
3. 实现代码

/** 产品 **/
//Map
@interface Map : NSObject
- (void)showCitys;
@end

@implementation Map
- (void)showCitys{
   
}
@end

//BaiduMap
@interface BaiduMap : Map

@end

@implementation BaiduMap
- (void)showCitys{
   NSLog(@"百度地图显示城市");
}
@end

//GoogleMap
@interface GoogleMap : Map

@end

@implementation GoogleMap
- (void)showCitys{
   NSLog(@"谷歌地图显示城市");
}

//Browser
@interface Browser : NSObject
- (void)openPage;
@end

@implementation Browser
- (void)openPage{
    
}
@end

//BaiduBrowser
@interface BaiduBrowser : Browser

@end

@implementation BaiduBrowser
- (void)openPage{
    NSLog(@"百度浏览器打开网页");
}
@end

//GoogleBrowser
@interface GoogleBrowser : Browser

@end

@implementation GoogleBrowser
- (void)openPage{
    NSLog(@"谷歌浏览器打开网页");
}
@end

/** 工厂 **/
//Factory
@interface Factory : NSObject
+ (Map *)createMap;
+ (Browser *)createBrowser;
@end

@implementation Factory
+ (Map *)createMap{
    return [[Map alloc] init];
}

+ (Browser *)createBrowser{
    return [[Browser alloc] init];
}
@end

//BaiduFactory
@interface BaiduFactory : Factory

@end

@implementation BaiduFactory
+ (Browser *)createBrowser{
    return [[BaiduBrowser alloc] init];
}

+ (Map *)createMap{
    return [[BaiduMap alloc] init];
}
@end

//GoogleFactory
@interface GoogleFactory : Factory

@end

@implementation GoogleFactory
+ (Browser *)createBrowser{
    return [[GoogleBrowser alloc] init];
}

+ (Map *)createMap{
    return [[GoogleMap alloc] init];
}
@end

/** 调用 **/
- (void)viewDidLoad {
    [super viewDidLoad];
   
    Map *googleMap = [GoogleFactory createMap];
    [googleMap showCitys];
    Browser *googleBrowser = [GoogleFactory createBrowser];
    [googleBrowser openPage];
    
    Map *baiduMap = [BaiduFactory createMap];
    [baiduMap showCitys];
    Browser *baiduBrowser = [BaiduFactory createBrowser];
    [baiduBrowser openPage];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值