提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,抽象工厂跟工厂模式的区别在于对象的实例化,工厂模式交给子类去处理,而抽象工厂不是,他是通过方法返回对象的实例
适用的情况:
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
interface IAnimalFactory{
ICat createCat();
IDog createDog();
}
class BlackAnimalFactory implements IAnimalFactory{
public ICat createCat(){
return new BlackCat();
}
public IDog createDog(){
return new BlackDog();
}
}
class WhiteAnimalFactory implements IAnimalFactory{
public ICat createCat(){
return new WhiteCat();
}
public IDog createDog(){
return new WhiteDog();
}
}
interface ICat{
void eat();
}
interface IDog{
void eat();
}
class BlackCat implements ICat{
public void eat() {
System.out.println("Black cat is eating");
}
}
class WhiteCat implements ICat{
public void eat(){
System.out.println("White cat is eating ");
}
}
class BlackDog implements IDog{
public void eat() {
// TODO Auto-generated method stub
System.out.println("Black dog is eating");
}
}
class WhiteDog implements IDog{
public void eat(){
System.out.println("White dog is eating ");
}
}
public class AbstractFactory {
public static void main(String[] args) {
IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
ICat blackCat = blackAnimalFactory.createCat();
blackCat.eat();
blackAnimalFactory.createDog().eat();
IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
whiteAnimalFactory.createCat().eat();
whiteAnimalFactory.createDog().eat();
}
}
结果:
Black cat is eating
Black dog is eating
White cat is eating
White dog is eating