前言:
抽象工厂设计模式是用来创建一个产品族的,简单工厂和工厂方法设计模式是用来创建一个具体产品的。
怎么实现:
抽象工厂:工厂的父类,包含对多个产品的声明
具体工厂:抽象工厂的实现,负责创建产品族中的多个产品对象
实体父类:被创建对象的父类,负责描述所有实例的公共接口
具体实体:要被创建的具体的对象
代码:
水果类父类:
package com.xhx.designpattern;
public interface Fruit {
/**
* 水果
*/
void get();
}
苹果抽象类:
package com.xhx.designpattern;
public abstract class Apple implements Fruit{
public abstract void get();
}
香蕉抽象类:
package com.xhx.designpattern;
public abstract class Banana implements Fruit{
public abstract void get();
}
北方苹果具体类:
package com.xhx.designpattern;
public class NorthApple extends Apple {
@Override
public void get() {
System.out.println("北方苹果");
}
}
北方香蕉具体类:
package com.xhx.designpattern;
public class NorthBanana extends Banana {
@Override
public void get() {
System.out.println("北方香蕉");
}
}
南方苹果具体类:
package com.xhx.designpattern;
public class SourthApple extends Apple {
@Override
public void get() {
System.out.println("南方苹果");
}
}
南方香蕉具体类:
package com.xhx.designpattern;
public class SourthBanana extends Banana {
@Override
public void get() {
System.out.println("南方香蕉");
}
}
工厂类父类:工厂用来生产一系列产品
package com.xhx.designpattern;
public interface FruitFactory {
//实例化Apple
Fruit getApple();
//实例化Banana
Fruit getBanana();
}
北方工厂:
package com.xhx.designpattern;
public class NorthFruitFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new NorthApple();
}
@Override
public Fruit getBanana() {
return new NorthBanana();
}
}
南方工厂:
package com.xhx.designpattern;
public class SourthFruitFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new SourthApple();
}
@Override
public Fruit getBanana() {
return new SourthBanana();
}
}
启动类:
package com.xhx.designpattern;
public class App
{
public static void main( String[] args )
{
//可以创建北方水果的工厂
FruitFactory fruitFactory = new NorthFruitFactory();
Fruit apple = fruitFactory.getApple();
apple.get();
Fruit banana = fruitFactory.getBanana();
banana.get();
}
}