设计模式之抽象工厂模式

简介:

关于设计模式找到了一个系列讲的非常到位,也很容易让人理解,这里我也是看下面的博客来理解抽象工厂模式。

http://blog.csdn.net/column/details/loveyun.html?&page=2

理解抽象工厂应先了解产品族、产品等级的概念:

所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。而这两个家族都来自于三个产品等级:主板、芯片组、CPU。一个等级结构是由相同的结构的产品组成,示意图如下:

 

UML类图:

根据UML类图,以实现苹果和三星生产手机和电脑为例子来用代码实现。

1.抽象产品

1、抽象手机


#import <Foundation/Foundation.h>

@protocol ITelephone <NSObject>
-(void) getProductInfo;
@end

2、抽象电脑


#import <Foundation/Foundation.h>

@protocol IComputer <NSObject>
-(void) getProductInfo;
@end

2.具体产品

1、苹果手机


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

@interface AppleTelePhone : NSObject<ITelephone>

@end


#import "AppleTelePhone.h"

@implementation AppleTelePhone
-(void) getProductInfo
{
    NSLog(@"苹果手机");
}
@end

2、苹果电脑


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

@interface AppleComputer : NSObject<IComputer>

@end


#import "AppleComputer.h"

@implementation AppleComputer
-(void) getProductInfo
{
    NSLog(@"苹果电脑");
}
@end

3、三星手机


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

@interface SamsungTelePhone : NSObject<ITelephone>

@end


#import "SamsungTelePhone.h"

@implementation SamsungTelePhone
-(void) getProductInfo
{
    NSLog(@"三星手机");
}
@end

4、三星电脑


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

@interface SamsungComputer : NSObject<IComputer>

@end


#import "SamsungComputer.h"

@implementation SamsungComputer
-(void) getProductInfo
{
    NSLog(@"三星电脑");
}
@end

3.抽象工厂


#import <Foundation/Foundation.h>
#import "ITelephone.h"
#import "IComputer.h"

@protocol ElectronicFactory <NSObject>
-(id<ITelephone>) productTelephone;
-(id<IComputer>)  productComputer;
@end

4.具体工厂(产品族)

1、苹果工厂


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

@interface AppleFactory : NSObject<ElectronicFactory>

@end


#import "AppleFactory.h"
#import "AppleComputer.h"
#import "AppleTelePhone.h"


@implementation AppleFactory
-(id<ITelephone>) productTelephone
{
    return [[AppleTelePhone alloc]init];
}
-(id<IComputer>)  productComputer
{
    return [[AppleComputer alloc]init];
}
@end

2、三星工厂


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

@interface SamsungFactory : NSObject<ElectronicFactory>

@end


#import "SamsungFactory.h"
#import "SamsungTelePhone.h"
#import "SamsungComputer.h"

@implementation SamsungFactory
-(id<ITelephone>) productTelephone
{
    return [[SamsungTelePhone alloc]init];
    
}
-(id<IComputer>)  productComputer
{
    return [[SamsungComputer alloc]init];
}
@end

调用 :


id<ElectronicFactory> appleFactory=[[AppleFactory alloc]init];
    [[appleFactory productComputer] getProductInfo];
    [[appleFactory productTelephone]getProductInfo];
    
    id<ElectronicFactory> samsungFactory=[[SamsungFactory alloc]init];
    [[samsungFactory productComputer] getProductInfo];
    [[samsungFactory productTelephone] getProductInfo];

通过代码我们能分析出如果增加产品等级那样抽象工厂、具体工厂都要改,这样会很麻烦,如果增加产品族那就很容易。这也是我们使用抽象工厂的优缺点之一。


相关文章
|
6月前
|
设计模式 C++
设计模式之抽象工厂模式(C++)
设计模式之抽象工厂模式(C++)
|
6月前
|
设计模式
设计模式~抽象工厂模式-04
抽象工厂 优点 缺点 使用场景 为创建一组相
29 0
|
4月前
|
设计模式 Java
Java设计模式【三】:抽象工厂模式
Java设计模式【三】:抽象工厂模式
18 0
|
7月前
|
设计模式
设计模式~~~抽象工厂模式
设计模式~~~抽象工厂模式
28 0
|
15天前
|
设计模式 Java Windows
23种设计模式,抽象工厂模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建相关或依赖对象的家族,而不需要指定具体类。该模式允许客户端在不知道具体类的情况下,通过其共同的接口来创建一组产品。
27 7
|
3月前
|
设计模式 Oracle 关系型数据库
设计模式 | 抽象工厂模式
设计模式 | 抽象工厂模式
22 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——02抽象工厂模式
Golang设计模式——02抽象工厂模式
21 0
|
8月前
|
设计模式 Java 数据库连接
Java设计模式之抽象工厂模式:创造多个相关对象
在软件开发领域,设计模式是一种用于解决常见问题的实践方法,它提供了一些被验证过的指导原则。抽象工厂模式是创建型设计模式中的佼佼者,可以帮助我们在处理多个相关对象的创建时保持一致性。让我们深入了解抽象工厂模式的内涵以及它如何在Java中应用。
61 0
|
3月前
|
设计模式 前端开发
【设计模式】之抽象工厂模式
抽象工厂模式是一种创建型设计模式,适用于需要创建一系列相关或相互依赖对象的场景。在前端开发中,抽象工厂模式可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。它通过封装对象的创建过程,使得客户端代码与具体类解耦,并且可以通过切换具体工厂类来改变整个系统的行为。然而,它也增加了系统的复杂度,并且当产品族较多时会导致大量的具体工厂类。因此,在使用抽象工厂模式时需要权衡利弊,并根据实际情况进行选择。
53 0
【设计模式】之抽象工厂模式
|
3月前
|
设计模式 NoSQL 中间件
设计模式 - 创建型模式_抽象工厂模式
设计模式 - 创建型模式_抽象工厂模式
22 0