前言:
抽象工厂设计模式是用来创建一个产品族的,简单工厂和工厂方法设计模式是用来创建一个具体产品的。
怎么实现:
抽象工厂:工厂的父类,包含对多个产品的生明
具体工厂:抽象工厂的实现,负责创建产品族中的多个产品对象
实体父类:被创建对象的父类,负责描述所有实例的公共接口
具体实体:要被创建的具体的对象
代码:
水果类父类:
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(); } }