抽象工廠模式是工廠方法模式的升級版本。若是咱們要實現的系統有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