目录
1.特点
抽象工厂是工厂模式的升级版本,工厂模式只生产一个等级的产品,而抽象类可以生成多个等级的产品。
2.模式与结构
2.1.模式
抽象工厂模式的主要角色如下
抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
2.2.结构图
3.实现
3.1.动物类抽象
//抽象产品:动物类
interface Animal { public void show(); }
3.2.动物类实现类
//具体产品:马类
class Horse implements Animal {...}
//具体产品:牛类
class Cattle implements Animal {...}
3.3.植物类抽象类
//抽象产品:植物类
interface Plant {public void show();}
3.4.植物类实现类
//具体产品:水果类
class Fruitage implements Plant {...}
//具体产品:蔬菜类
class Vegetables implements Plant {...}
3.5.农场类抽象类
//抽象工厂:农场类
interface Farm {
public Animal newAnimal();
public Plant newPlant();
}
3.6.农场类实现类
//具体工厂:韶关农场类
class SGfarm implements Farm {
public Animal newAnimal() {
System.out.println("新牛出生!");
return new Cattle();
}
public Plant newPlant() {
System.out.println("蔬菜长成!");
return new Vegetables();
}}
//具体工厂:上饶农场类
class SRfarm implements Farm {public Animal newAnimal() {
System.out.println("新马出生!");
return new Horse();}public Plant newPlant() {
System.out.println("水果长成!");
return new Fruitage();
}}
4.应用场景
抽象工厂模式通常适用于以下场景:
当需要创建的对象是一系列相互关联或相互依赖的产品族时,如电器工厂中的电视机、洗衣机、空调等。
系统中有多个产品族,但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。
系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。