`
abcxo
  • 浏览: 32414 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

5.封装创建-简单工厂方法(Simple Factory method)+多态工厂+抽象工厂(Abstract factories)

阅读更多

5.封装创建-简单工厂方法(Simple Factory method)+多态工厂+抽象工厂(Abstract factories)

 

这个应该是我们平时接触得最多的设计模式了吧,我个人也是经常使用,这是一个创建型的设计模式,其实这3个模式原理都是一样的,不过使用了接口,内部类,所以使得实现方法更加的优雅。我们到底面对着一个什么样的问题,这才决定我们为什么要用它,假如你的系统里面很多地方需要创建a对象和b对象,很明显,这样是分散的分布在系统里面的,这时,如果你要在创建a对象的地方添加一个新类型c对象,那么你就惨了,你需要在那么多个地方创建,而且更加麻烦的是逻辑问题,因为多了一个对象,判断方面可能会出现不可预知的bug,这时候我们会想,为什么不弄成一个服务,生产服务,我使用的是a服务,而不是a对象,当我需要添加新的对象,我可以在a服务里面添加,这时候我的客户端代码就不需要改变了,需要改变的是生产a服务的时候加多一个对象,这就是工厂模式的基本思路:所有需要创建的对象的代码都由工厂来代工,当需要新的功能,新的类型,只需要改变一下工厂就ok了,这也保证了接口的稳定性。

 

 

 

 

简单工厂方法(Simple Factory method):

class car{

}

 

class benz extends car{}

class baoma extends car{}

 

class factory{

public static getCar(String type){

if(type.equals("Benz")) return new benz(); 

if(type.equals("baoma")) return new baoma(); 

}

}

 

这就是一个简单的工厂方法了,面对简单的系统,使用这个就很足够,但是一旦逻辑复杂了,创建的产品需要逻辑判断,那么这个工厂可能就负担不了了,而且所有逻辑都在工厂这里,一旦工厂着火,那么整个系统就该瘫痪了,所以我们就衍生出下一个工厂模式

 

 

 

 

 

多态工厂(Polymorphic factories):

多态工厂的好处就是为了解决刚才上诉的问题,他实现了每一类对象,每一个工厂,我觉得在逻辑上把纵多的逻辑分担在了每一个工厂上面,上面的例子,只需要为每一个产品添加一个工厂类即可

 

 

 

抽象工厂(Abstract factories):

抽象工厂其实更加一般化,更加抽象化,使用内部类实现更加优雅,我举个例子,奔驰和宝马都是跑车类型的,然后五菱和东方都是屌丝类型的,那么这时候是不是就有两个大类型,那么我们就为其创建两个工厂,每个工厂分别生产两大类型的车,然后跑车工厂就得生产奔驰宝马....,可以简单概述就是一个工厂生产多个相同大类型的产品,而且经常我们用到抽象工厂,我们可以假设是根据不同环境,生产不同的环境类型(一系列需要的产品)。

 

 

 

 

其实工厂模式的变形很多,只要感觉对了,就差不多了,不需要死扣,毕竟复杂度这个东西是一个很难以衡量的东西,而且工厂模式通常可以混用的。我的另外一篇文章说的比较好。

 

 

 

 

http://abcxo.iteye.com/admin/blogs/1476090

0
6
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics