設計模式三—抽象工廠模式 一、定義 抽象工廠模式是工廠方法模式的進一步抽象。如果產品簇中只有一種產品,則退化為工廠方法模式。 二、原理圖 三、代碼實例 * 蘋果和土豆是園丁1的傑作 * 葡萄和西紅柿是園丁2的傑作 1、Fruit.java 2、Apple.java 3、Grape.java 4、Ve ...
設計模式三—抽象工廠模式
一、定義
抽象工廠模式是工廠方法模式的進一步抽象。如果產品簇中只有一種產品,則退化為工廠方法模式。
二、原理圖
三、代碼實例
* 蘋果和土豆是園丁1的傑作
* 葡萄和西紅柿是園丁2的傑作
1、Fruit.java
public interface Fruit { /* * 生長 * 收穫 * 栽種 */ public void grow(); public void harvest(); public void plant(); }
2、Apple.java
public class Apple implements Fruit { private int treeAge; public void grow() { System.out.println("蘋果正在生長,,,"); } public void harvest() { System.out.println("收穫蘋果"); } public void plant() { System.out.println("栽種蘋果"); } public int getTreeAge() { return treeAge; } public void setTreeAge(int treeAge) { this.treeAge = treeAge; } }
3、Grape.java
public class Grape implements Fruit { private boolean seedless; public void grow() { System.out.println("葡萄正在生長。。。"); } public void harvest() { System.out.println("收穫葡萄。"); } public void plant() { System.out.println("栽種葡萄。"); } public boolean isSeedless() { return seedless; } public void setSeedless(boolean seedless) { this.seedless = seedless; } }
4、Vegetable.java
public interface Vegetable { /* * 生長 * 收穫 * 栽種 */ public void grow(); public void harvest(); public void plant(); }
5、Potato.java
public class Potato implements Vegetable { public void grow() { System.out.println("土豆正在生長,,,"); } public void harvest() { System.out.println("收穫土豆"); } public void plant() { System.out.println("栽種土豆"); } }
6、Tomato.java
public class Tomato implements Vegetable { public void grow() { System.out.println("西紅柿正在生長,,,"); } public void harvest() { System.out.println("收穫西紅柿"); } public void plant() { System.out.println("栽種西紅柿"); } }
7、Gardener.java
public interface Gardener { /* * 水果園丁 * 蔬菜園丁 * 水果蔬菜各兩種 * 建立水果工廠的方法 */ public Fruit factoryFruit(); public Vegetable factoryVegetable(); }
8、ConcreteGardener1.java
public class ConcreteGardener11 implements Gardener { //等級為1的園丁生產的水果和蔬菜 /* * 蘋果和土豆是園丁1的傑作,或者說是一等產品 * 葡萄和西紅柿是園丁2的傑作,或者說是二等產品 */ public Fruit factoryFruit() { return new Apple(); } public Vegetable factoryVegetable() { return new Potato(); } }
9、ConcreteGardener2.java
public class ConcreteGardener12 implements Gardener { //等級為2的園丁生產的水果和蔬菜 /* * 蘋果和土豆是園丁1的傑作,或者說是一等產品 * 葡萄和西紅柿是園丁2的傑作,或者說是二等產品 */ public Fruit factoryFruit() { return new Grape(); } public Vegetable factoryVegetable() { return new Tomato(); } }
10、ClientDemo
public class ClientDemo { public static void main(String[] args) { /* * 蘋果和土豆是園丁1的傑作,或者說是一等產品 * 葡萄和西紅柿是園丁2的傑作,或者說是二等產品 */ Gardener gardener1=new ConcreteGardener11(); Gardener gardener2=new ConcreteGardener12(); Fruit apple = gardener1.factoryFruit(); Vegetable potato=gardener1.factoryVegetable(); Fruit grape = gardener2.factoryFruit(); Vegetable tomato=gardener2.factoryVegetable(); apple.plant(); apple.grow(); apple.harvest(); potato.plant(); potato.grow(); potato.harvest(); grape.plant(); grape.grow(); grape.harvest(); tomato.plant(); tomato.grow(); tomato.harvest(); } }
四、運行結果
栽種蘋果
蘋果正在生長,,,
收穫蘋果
栽種土豆
土豆正在生長,,,
收穫土豆
栽種葡萄。
葡萄正在生長。。。
收穫葡萄。
栽種西紅柿
西紅柿正在生長,,,
收穫西紅柿