转自:http://book.codedq.net/design-pattern/AbstractFactory.html
AbstractFactory抽象工厂
概述
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
一个系统要独立于它的产品的创建、组合和表示时 一个系统要由多个产品系列中的一个来配置时 当你要强调一系列相关的产品对象的设计以便进行联合使用时 当你提供一个产品类库,而只想显示它们的接口而不是实现时
参与者
AbstractFactory 声明一个创建抽象产品对象的操作接口 ConcreteFactory 实现创建具体产品对象的操作 AbstractProduct 为一类产品对象声明一个接口 ConcreteProduct 定义一个将被相应的具体工厂创建的产品对象。实现AbstractProduct接口 ClientTest 仅使用由AbstractFactory和AbstractProduct类声明的接口
类图
例子
AbstractFactory
public interface IAnimalFactory {
ICat createCat();
IDog createDog();
}
ConcreteFactory
public class BlackAnimalFactory implements IAnimalFactory {
public ICat
createCat() {
return new BlackCat();
}
public IDog
createDog() {
return new BlackDog();
}
}
public class WhiteAnimalFactory implements IAnimalFactory {
public ICat
createCat() {
return new WhiteCat();
}
public IDog
createDog() {
return new WhiteDog();
}
}
AbstractProduct
public interface ICat {
void eat();
}
public interface IDog {
void eat();
}
ConcreteProduct
public class BlackCat implements ICat {
public void eat() {
System.out.println(
"The black cat is eating!");
}
}
public class WhiteCat implements ICat {
public void eat() {
System.out.println(
"The white cat is eating!");
}
}
public class BlackDog implements IDog {
public void eat() {
System.out.println(
"The black dog is eating");
}
}
public class WhiteDog implements IDog {
public void eat() {
System.out.println(
"The white dog is eating!");
}
}
ClientTest
public static void main(String[] args) {
IAnimalFactory blackAnimalFactory = new BlackAnimalFactory()
ICat blackCat = blackAnimalFactory
.createCat()
blackCat
.eat()
IDog blackDog = blackAnimalFactory
.createDog()
blackDog
.eat()
IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory()
ICat whiteCat = whiteAnimalFactory
.createCat()
whiteCat
.eat()
IDog whiteDog = whiteAnimalFactory
.createDog()
whiteDog
.eat()
}
结果
The black cat
is eating!
The black dog
is eating!
The white cat
is eating!
The white dog
is eating!
创建型模式
抽象工厂 工厂方法 单例模式 建造者模式 原型模式