目录
一 介绍
抽象工厂模式和工厂方法模式的比较
工厂方法模式只考虑生产同种类的产品。(比如一个工厂生产口罩)
抽象工厂模式可以考虑生产多种类的产品。(比如一个工厂又生产口罩又生产手机)抽象工厂模式是工厂方法模式的升级版本。
抽象工厂模式定义:
为访问类提供一个创建一组相关或相互依赖对象的接口,而访问类无须指定所要产品的具体类就可以得到同族的不同种类的产品。
二 示例和代码
比如有两个农场,苹果农场和番茄农场,苹果农场生产苹果,番茄农场生产番茄。可以使用工厂方法模式。
后来,两个农场都进行了业务扩张,苹果农场除了种苹果,还养猪;番茄农场除了种番茄,还养马。
因为两个农场不仅种植植物,还养了动物,生产了多种类的产品,这时候就可以使用抽象工厂模式。
植物产品线
package com.qing.abstractFactoryMethod;
public abstract class Plant {
abstract void show();
}
package com.qing.abstractFactoryMethod;
public class Apple extends Plant {
@Override
void show() {
System.out.println("show 苹果");
}
}
package com.qing.abstractFactoryMethod;
public class Tomato extends Plant {
@Override
void show() {
System.out.println("show 番茄");
}
}
动物产品线
package com.qing.abstractFactoryMethod;
public abstract class Animal {
abstract void show();
}
package com.qing.abstractFactoryMethod;
public class Horse extends Animal {
@Override
void show() {
System.out.println("show 马");
}
}
package com.qing.abstractFactoryMethod;
public class Pig extends Animal {
@Override
void show() {
System.out.println("show 猪");
}
}
工厂
package com.qing.abstractFactoryMethod;
public interface IFarm {
Animal createAnimal();
Plant createPlant();
}
package com.qing.abstractFactoryMethod;
public class AppleFarm implements IFarm {
@Override
public Animal createAnimal() {
return new Pig();
}
@Override
public Plant createPlant() {
return new Apple();
}
}
package com.qing.abstractFactoryMethod;
public class TomatoFarm implements IFarm {
@Override
public Animal createAnimal() {
return new Horse();
}
@Override
public Plant createPlant() {
return new Tomato();
}
}
测试
package com.qing.abstractFactoryMethod;
public class Test1 {
public static void main(String[] args) {
IFarm appleFarm = new AppleFarm();
appleFarm.createPlant().show();
appleFarm.createAnimal().show();
System.out.println("-------------------");
IFarm tomatoFarm = new TomatoFarm();
tomatoFarm.createPlant().show();
tomatoFarm.createAnimal().show();
}
}
结果