抽象工厂模式,对工厂方法模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行抽象,所以,苹果又分为中国苹果,英国苹果和美国苹果。中国的水果园中有苹果、香蕉和梨等。抽象工厂中声明生产苹果、香蕉和梨等水果,那么具体的工厂相当于中国、英国和美国的水果园,各个水果园负责生产水果、香蕉和梨等。
Fruit
public interface Fruit {
/**
* 抽象接口
*/
void get();
}
Apple
public abstract class Apple implements Fruit {
/**
* 苹果
*/
@Override
public abstract void get();
}
Banana
public abstract class Banana implements Fruit {
/**
* 香蕉
*/
@Override
public abstract void get();
}
ChinaApple
public class ChinaApple extends Apple {
@Override
public void get() {
System.out.println("中国的苹果...");
}
}
EnglandApple
public class EnglandApple extends Apple {
@Override
public void get() {
System.out.println("英国的苹果....");
}
}
ChinaBanana
public class ChinaBanana extends Banana {
@Override
public void get() {
System.out.println("中国的香蕉....");
}
}
EnglandBanana
public class EnglandBanana extends Banana {
@Override
public void get() {
System.out.println("英国的香蕉....");
}
}
FruitFactory
public interface FruitFactory {
/**
* 实例化苹果
*
* @return
*/
Fruit getApple();
/**
* 实例化香蕉
*
* @return
*/
Fruit getBanana();
}
ChinaFactory
public class ChinaFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new ChinaApple();
}
@Override
public Fruit getBanana() {
return new ChinaBanana();
}
}
EnglandFactory
public class EnglandFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new EnglandApple();
}
@Override
public Fruit getBanana() {
return new EnglandBanana();
}
}
MainClass
public class MainClass {
public static void main(String[] args) {
// 创建中国工厂
FruitFactory chinaFactory = new ChinaFactory();
// 通过中国工厂生产中国苹果实例
Fruit apple = chinaFactory.getApple();
apple.get();
// 通过中国工厂生产中国香蕉实例
Fruit banana = chinaFactory.getBanana();
banana.get();
// 创建英国工厂
FruitFactory englandFactory = new EnglandFactory();
// 通过英国工厂生产英国苹果实例
Fruit englandApple = englandFactory.getApple();
englandApple.get();
// 通过英国工厂生产英国香蕉实例
Fruit englandBanana = englandFactory.getBanana();
englandBanana.get();
}
}