设计模式之抽象工厂模式

简介:

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

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];

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


相关文章
|
7月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
42 0
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
34 5
|
7月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
7月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
71 2
|
3月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
7月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
245 4
|
4月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
46 1
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
4月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
4月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式