抽象工厂模式是工厂方法模式的升级版本。若是咱们要实现的系统有N个产品族,每一个产品族有M种产品,那么就可使用抽象工厂模式。java
如图所示,水果有高等、低等。玩具备高等低等ide
因此咱们去送礼物时(包含水果和玩具).也有高等和低等ui
public interface Fruit { /** * 建立水果 * @return */ Fruit createFruit(); /** * 水果名称 */ void getName(); } public class GdFruit implements Fruit{ @Override public Fruit createFruit() { return new GdFruit(); } @Override public void getName() { System.out.println("我是高端水果"); } } public class DdFruit implements Fruit{ @Override public Fruit createFruit() { return new DdFruit(); } @Override public void getName() { System.out.println("我是低端水果"); } }
public interface Toy { /** * 建立玩具 * @return */ Toy createToy(); /** * 获取玩具名 */ void getName(); } public class GdToy implements Toy{ @Override public Toy createToy() { return new GdToy(); } @Override public void getName() { System.out.println("我是高端玩具"); } } public class DdToy implements Toy{ @Override public Toy createToy() { return new DdToy(); } @Override public void getName() { System.out.println("我是低端玩具"); } }
public interface Gift { /** * 建立水果 * @return */ Fruit createFruit(); /** * 建立玩具 * @return */ Toy createToy(); } public class GdFactory implements Gift{ @Override public Fruit createFruit() { return new GdFruit(); } @Override public Toy createToy() { return new GdToy(); } } public class DdFactory implements Gift{ @Override public Fruit createFruit() { return new DdFruit(); } @Override public Toy createToy() { return new DdToy(); } }
public class Demo { public static void main(String[] args) { Gift gift = new GdFactory(); Fruit fruit = gift.createFruit(); Toy toy = gift.createToy(); System.out.println("送礼物来了"); fruit.getName(); toy.getName(); } }
控制台console:code
送礼物来了
我是高端水果
我是高端玩具get
若是后面咱们还要加中端礼物的话,那么能够无缝的进行拓展了产品
但也是缺点,就是会略显臃肿it