设计模式之简单工厂

简单工厂模式,百度百科中对它介绍的挺详细, 也很容易理解。我先把百度百科的内容复制一下。

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

UML类图

 

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

该模式中包含的角色及其职责

 

工厂(Creator)角色

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

 

缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;这些缺点在工厂方法模式中得到了一定的克服。

 

使用场景

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用

 

代码实现:

1.创建接口

#import <Foundation/Foundation.h>
@protocol ICar <NSObject>
@optional
-(void) createCar;
@end

2.创建宝马、奔驰对象实现接口

#import <Foundation/Foundation.h>
#import "ICar.h"
@interface BMWCar : NSObject<ICar>
@end
#import "BMWCar.h"

@implementation BMWCar
-(void) createCar
{
    NSLog(@"创建宝马");
}
@end
#import <Foundation/Foundation.h>
#import "ICar.h"
@interface BenzCar : NSObject<ICar>
@end
#import "BenzCar.h"

@implementation BenzCar
-(void) createCar
{
    NSLog(@"创建奔驰");
}
@end

3.创建工厂根据参数返回不同的对象

#import <Foundation/Foundation.h>
#import "ICar.h"
#import "BMWCar.h"
#import "BenzCar.h"

@interface CarFactory : NSObject
-(id<ICar>) createCarWithName:(NSString *)carName;
@end
#import "CarFactory.h"

@implementation CarFactory
-(id<ICar>) createCarWithName:(NSString *)carName
{
    if ([carName isEqualToString:@"BMW"]) {
        return [[BMWCar alloc]init];
    }
    else if([carName isEqualToString:@"Benz"])
    {
        return [[BenzCar alloc]init];
    }
    else
    {
        return nil;
    }
}
@end

4.调用工厂方法

[[[[CarFactory alloc]init] createCarWithName:@"Benz"] createCar];

时间: 2024-11-02 23:23:01

设计模式之简单工厂的相关文章

设计模式: 简单工厂模式

引入: 在我们的思维中,会有一种习惯,当遇到某种问题时,会直接考虑用最直接的语言去去实现它,而往往忽略了整个程序的可维护性.可扩展性. 比如,我们写一个基本的计算器功能,要求能计算四则运算,大家或许会直接写: public class ProgramDemo{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(

C#设计模式(2)——简单工厂模式

原文:C#设计模式(2)--简单工厂模式 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用"new"关键字创建一个对象时,此时该类就依赖与

php设计模式之简单工厂模式详解_php技巧

本文以实例形式较为详细的介绍了PHP设计模式的简单工厂模式,对于进行PHP程序设计来说有很好的借鉴作用.具体如下: 一.概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(A

java设计模式之简单工厂模式

在编写一个计算器程序时,可以将业务逻辑和显示分离,业务逻辑封装为一个类(封装):如果要新添加一种运算,可以先创建一个Operation的基类,然后各种运算从Operation类继承,并实现GetResult()虚函数,这时添加新的运算只需要派生一个新的类,即不需要之前的运算参与编译.如何让计算器知道我是希望使用哪种运算呢?应该考虑单独的类来做这个创造实例的过程,这就是工厂.创建一个OperationFactory类,传入参数,函数createOperate就可以实例化出合适的对象. Java代码

设计模式-简单工厂模式(SimpleFactory-C#)

设计 <java与模式> 上面那本书上的例子举的是园丁和果园的例子,学习设计模式最好在生活中自己找个例子 实践一下,下面是我自己的一个例子,是讲快餐店的例子,快餐店提供很多食物,比如 面条,米饭,面包.首先定义了一个Food接口,然后这些食物都从它来继承,定义了一个大厨 他包办所有食物的制作工作,这就是我所理解的简单工厂模式的概念,下面是源代码: using System; namespace SimpleFactoryPattern{ /// <summary> /// 简单工厂

设计模式之简单工厂模式

设计模式,六大设计原则,类的特性 总纲 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 简单工厂模式(Simple Factory) 简单工厂模式就是工厂方法模式的缩小版 通用类图 组成 1.工厂类:这是本模式的核心,含有一定的商业逻辑和判断逻辑.在java中它往往由一个具体类实现. 2.抽象产品:它一般是具体产品继承的父类或者实现的接口.在java中由接口或者抽象类来实现. 3.具体产品:工厂类所创建的对象就是此角色

大话设计模式之简单工厂模式

       从设计模式的类型来说,简单工厂模式是属于创建性模式,又叫做静态工厂方法模式,但不属于23中GOF设计模式之一,简单的工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现.         那么到底什么是简单工厂模式?我们中午在中快食堂吃饭,中快食堂满足了我们的需求,这里的中快食堂就是一个简单的工厂,在现实生活中工厂是负责生产产品的,,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个

java设计模式之简单工厂模式_java

在编写一个计算器程序时,可以将业务逻辑和显示分离,业务逻辑封装为一个类(封装):如果要新添加一种运算,可以先创建一个Operation的基类,然后各种运算从Operation类继承,并实现GetResult()虚函数,这时添加新的运算只需要派生一个新的类,即不需要之前的运算参与编译.如何让计算器知道我是希望使用哪种运算呢?应该考虑单独的类来做这个创造实例的过程,这就是工厂.创建一个OperationFactory类,传入参数,函数createOperate就可以实例化出合适的对象. Java代码

设计模式之简单工厂模式(Simple Factory Pattern)

设计 工厂模式 THE FACTORY PATTERN 在面向对象(OO)程序中,我们经常看到的一种模式就是简单工厂模式(Simple Factory Pattern).简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的认为不同,而且根据不同的数据进行了优化.简单工厂模式实际上不属于23个GOF模式,但它可以作为工厂方法模式(FACTORY Method)的一个引导. 工厂模式如何工作 为了便于理解简单工厂模式,可以看下