最近发现好懒,奥运前就打算写的BLOG,拖到奥运后才写,咳...放假3天什么都没干,整天无所事事....
工厂方法模式是简单工厂模式(静态工厂模式)的一种推广,他保持了简单工厂模式的优点,并在上面有了一些提升
在工厂方法模式中,核心工厂不再负责所有实例的创建,而改为了由他的子类进行创建工作.核心工厂类变为了抽象的角色.
工厂方法模式的系统涉及到了以下角色:
抽象工厂角色:与应用程序无关,任何在模式中创建对象的工厂必须实现这个接口。
具体工厂角色:实现了抽象工厂接口的具体Java类,含有与引用密切相关的逻辑,并且受到应用程序的调用以创建产品
对象。
抽象产品角色:工厂方法所创建产品对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品角色:这个角色实现了抽象产品角色所声名的接口。工厂方法所创建的每个具体产品对象都是某个具体产品角
色的实例。
可以看下面的图片(从原来那个高手blog中截出来的)
上面这个图中,抽象工厂角色就是水果工厂接口,
具体工厂角色就是底下的苹果工厂等,
抽象产品角色就是水果产品接口,
具体产品角色就是具体的产品.
工厂方法模式和简单工厂相比,工厂方法模式把核心工厂类抽象出来,也就和前面简单工厂方法中,水果产品接口是同级
抽象工厂方法
按照我理解我看那篇文章的说明,涉及到一个产品族和产品等级的概念
举个例子吧
上面的水果中的苹果,草莓,葡萄就属于一个等级的东西,如果工厂需要扩建,生产的苹果按地方分成,北方苹果,南方苹果,这就
是一个产品族,他属于同一个工厂下的不同产品,也许我的举例不是很清楚
看别人举的例子
他从一个抽象工厂中生成了2个子类工厂,一个热带工厂,一个亚热带工厂, 2个工厂都可以生产水果和蔬菜,但是热带工厂只能
生产热带水果和蔬菜,亚热带水果只能身长亚热带的水果和蔬菜,水果继承了水果的抽象类,蔬菜继承了蔬菜的抽象类
与工厂方法模式不同的是
工厂方法采用的是类继承机制(生成一个子类,重写该工厂方法,在该方法中生产一个对象)。
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品对象.
不理解可以看
http://lavasoft.blog.51cto.com/62575/11674