設計模式(二)---工廠方法模式
阿新 • • 發佈:2017-08-30
ack cto sys alt 修改 spa 抽象類 .com desc
1、簡介:工廠方法模式是類的創建模式,又叫虛擬構造子模式或是多態性工廠模式,它的實現方式是創建一個工廠接口,將實際創建對象的的工作轉移到工廠子類中,在系統的擴展中,可以在不修改工廠角色的情況下引進新的產品。
2、工廠方法模式UML
3、工廠方法模式情景示意性類圖
4、類圖分析
從以上兩個圖可以看出,工廠方法模式涉及到以下四個角色
4、1:抽象工廠:擔任這個角色的是工廠方法模式的核心,它與應用無關,任何在模式中創建對象的工廠都必須實現這個接口,在實際應用中,這個角色由java抽象類或接口來實現
4、2:具體工廠:擔任這個角色的是抽象工廠的具體實現類,具體工廠含有業務邏輯,並受到客戶端的調用創建產品對象,這個角色由java類來實現。
4、3:抽象產品:這個角色是工廠方法模式創建的對象的超類型(父類),在實際應用中,由java抽象類或是接口來實現
4、4:具體產品:這個角色實現了抽象產品角色聲明的接口,工廠方法模式所創建的每一個對象都是某個具體產品角色的實例。
5、源代碼
5.1:創建一個商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: ProductInterface * @Description: 產品接口,所有產品都必須實現此接口 * ***********************************************************/ public interface Product { public void say(); }
5.2:創建一個食品類 實現商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: Food * @Description: 食品類 * ********************************************************** */ public class Food implementsProduct{ @Override public void say() { System.out.println("我是食品"); } }
5.3:創建一個水果類 實現商品接口
package FactoryMethod; /** * ******************************************************** * @ClassName: Fruits * @Description: 水果類 * ********************************************************** */ public class Fruits implements Product{ @Override public void say() { System.out.println("我是水果"); } }
5.4:創建工廠接口,所有具體工廠角色必須實現這個接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FactoryInterface * @Description: 工廠接口,所有具體工廠角色必須實現此接口 * ********************************************************** */ public interface FactoryInterface { public Product factory(); }
5.5:創建食品工廠類,實現工廠接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FoodFactory * @Description: 食品工廠類 * ********************************************************** */ public class FoodFactory implements FactoryInterface{ @Override public Product factory() { // TODO Auto-generated method stub return new Food(); } }
5.6:創建水果工廠類,實現工廠接口
package FactoryMethod; /** * ******************************************************** * @ClassName: FruitsFactory * @Description: 水果工廠類 * ********************************************************** */ public class FruitsFactory implements FactoryInterface{ @Override public Product factory() { // TODO Auto-generated method stub return new Fruits(); } }
5.7:創建工廠方法模式測試客戶端
package FactoryMethod; /** * ******************************************************** * @ClassName: FactoryMethodTest * @Description: 工廠方法模式測試類 * ********************************************************** */ public class FactoryMethodTest { public static void main(String[] args) { //獲取食品工廠對象 FactoryInterface foodFactory = new FoodFactory(); //獲取水果工廠對象 FactoryInterface fruitsFactory = new FruitsFactory(); //獲取食品對象 Product food = foodFactory.factory(); //獲取水果對象 Product fruits =fruitsFactory.factory(); //調用對象中的方法 food.say(); fruits.say(); } }
5.8:運行,得到如下結果
設計模式(二)---工廠方法模式