Jerry Lee

stay hungry,stay young.

Welcome to my world.


设计模式 简单工厂模式



简单工厂.png-3.3kB

定义

专门定义类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作。工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传给外界,而对象的创建是由外界决定的。外界只需要知道抽象子类对应的参数即可,而不需要知道抽象子类的创建过程,在外界使用时甚至不用引入抽象子类。

简单工厂模式将抽象子类的创建,和关于抽象子类相关的业务逻辑分离,降低对象间的耦合度。由于工厂类只是为外界创建对象,所以并不需要实例化工厂类对象,只需要为外界提供类方法即可。外界需要什么类型的抽象子类,只需要传递对应的参数即可。外界不需要知道具体的抽象子类,只需要使用抽象类即可。

简单工厂模式主要包含三部分:

工厂类:根据外界的需求,决定创建并返回哪个具体的抽象子类。

抽象类:定义抽象子类所需的属性和方法,子类通过继承自抽象类获得这些方法。

抽象子类:继承自抽象类,是具体操作的实现者,根据需求重写父类继承过来的方法。

业务场景

简单工厂模式主要适用于抽象子类的业务逻辑相同,但具体实现不同的情况。不同的操作子类执行同样的方法,最后的结果却是不同的,这也是多态的一种表现方式。

优点

1.使用者只需要给工厂类传入一个正确的约定好的参数,就可以获取你所需要的对象,而不需要知道其创建细节,一定程度上减少系统的耦合;

2.客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,减少开发者的记忆成本;

缺点

1.如果业务上添加新产品的话,就需要修改工厂类原有的判断逻辑,这其实是违背了开闭原则的;

2.在产品类型较多时,有可能造成工厂逻辑过于复杂。所以简单工厂模式比较适合产品种类比较少而且增多的概率很低的情况;

代码举例

+(Cola *)createColaWithType:(NSInteger)type{
switch (type) {
    case 0:
        return [CocaCola new];
        break; 
    case 1:
        return [PesiCola new];
        break;
    default:
        return nil;
        break;
} }

Cola *cocaCola = [SimpleFactory createColaWithType:0];
Cola *pesiCola = [SimpleFactory createColaWithType:1];
最近的文章

设计模式 工厂方法模式

定义又称为工厂模式,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,即通过不同的工厂子类来创建不同的产品对象;工厂方法模式和简单工厂模式十分类似,大致结构是基本类似的。不同在于工厂方法模式对工厂类进行了进一步的抽象,将之前的一个工厂类抽象成了抽象工厂和工厂子类,抽象工厂定义一个创建抽象子类的接口,抽象工厂的子类实现这些接口并决定实例化哪个抽象子类。工厂子类决定着创建哪个抽象子类,外界决定着创建哪种工厂子类,抽象子类和工厂子类是一一对应的。在工厂方法模式中,和简单...…

继续阅读
更早的文章

深入理解runloop

RunLoop简介运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,如果有Runloop程序就会一直运行,并且时时刻刻在等待用户的输入操作。RunLoop可以在需要的时候自己跑起来运行,在没有操作的试试就停下来休息。充分节省CPU资源,提高程序性能。RunLoop基本作用1.保持程序持续运行 程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunLoop保证主线程不会被销毁,也就保证了程序的持续运行;2.处理App中的...…

继续阅读