1、抽象工厂模式,抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态。 抽象工厂模式是工厂方法模式的进一步扩广化和抽象化,抽象工厂模式,抽象工厂模式,在抽象工厂模式中,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。,抽象工厂模式的位图,在只有一个产品族时,第三维就坍缩掉,位图也就只剩下两维。这时抽象工厂模式就退化得与工厂方法模式一模一样。,抽象工厂模式,抽象工厂模式在小花果园系统中的实现,抽象工厂模式在小花果园系统中的实现,源代码,源代码,源代
2、码,源代码,源代码,抽象工厂模式在小花果园系统中的实现,两处花园就相当于两个产品族。显然,给北方花园的植物是要种植在一起的,给南方花园的植物是要另种植在一起的。这种分别应当体现在系统的设计上面。,抽象工厂(AbstractFactory)类或接口,担任这个角色的是模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。,实工厂类 (Conrete Factory),担任这个角色的是与应用程序紧密相关的,直接在应用程序调用下,创建产品实例或者使用工厂方法创建产品实例的那样一些类。,抽象产品 (Abstract Product),担任这个角色的类是工厂方法模式
3、所创立的对象的父类,或它们共同拥有的接口。,实产品 (Concrete Product),担任这个角色的类是工厂方法模式所创立的任何对象所属的类。,接口 Gardener,package com.javapatterns.abstractfactory; public interface Gardener ,返回,实工厂类 NorthenGardener,package com.javapatterns.abstractfactory; public class NorthenGardener implements Gardener public VeggieIF createVeggie(S
4、tring name) return new NorthernVeggie(name); public FruitIF createFruit(String name) return new NorthernFruit(name); ,返回,实工厂类 TropicalGardener,package com.javapatterns.abstractfactory; public class TropicalGardener implements Gardener public VeggieIF createVeggie(String name) return new TropicalVegg
5、ie(name); public FruitIF createFruit(String name) return new TopicalFruit(name); ,返回,接口 VeggieIF,package com.javapatterns.abstractfactory; public interface VeggieIF ,返回,实产品类 NorthernVeggie,实产品类 NorthernFruit 与此极为类似,故略去。 package com.javapatterns.abstractfactory; public class NorthernVeggie implements
6、 VeggieIF public NorthernVeggie(String name) this.name = name; public String getName() return name; public void setName(String name)this.name = name; private String name; ,返回,实产品类 TropicalVeggie,实产品类 TropicalFruit 与此极为类似,故略去。 package com.javapatterns.abstractfactory; public class TropicalVeggie implements VeggieIF public TropicalVeggie(String name) this.name = name; public String getName() return name; public void setName(String name) this.name = name; private String name; ,返回,