【java設計模式】工廠方法模式

轉載自: http://www.cnblogs.com/ikuman/archive/2013/02/01/2881126.html java工廠方法模式

意圖:定義一個用於建立對象的接口,讓子類決定建立那個類。Factory Method使一個類的實例化延遲到其子類中
動機:框架使用抽象類定義和維護對象之間的關係。這些對象的建立一般也由框架負責
適用性:
1.當一個類不知道它所必須建立的對象的類的時候
2.當一個類但願由它的子類來指定它所建立的對象的時候
3.當類將建立對象的職責委託給多個幫助子類中的某一個,而且你但願將那一個幫助子類是代理者這一信息局部化的時候
結構:html

工廠方法的實現主要有兩種狀況:java

1.Creator類是一個抽象類而且不提供它所聲明的工廠方法的實現框架

2.Creator是一個具體的類並且爲工廠方法提供一個缺省的實現ide

實例:工具

複製代碼

 1 package com.test.patten.factory; 2  3 public abstract class Creator { 4     public abstract Product productFactory(String type); 5      6     public void doSomething(String type) { 7         Product product = productFactory(type); 8         product.getPrice(); 9     }10 }

複製代碼

複製代碼

1 package com.test.patten.factory;2 3 public abstract class Product {4     double price = 0;5     public void getPrice() {6         System.out.println("個人價格是:"+price);7     }8 }

複製代碼

複製代碼

1 package com.test.patten.factory;2 3 public class GoodProduct extends Product {4 5     public GoodProduct() {6         super();7         this.price = 100.0;8     }9 }

複製代碼

複製代碼

1 package com.test.patten.factory;2 3 public class BadProduct extends Product {4 5     public BadProduct() {6         super();7         this.price = 0.01;8     }9 }

複製代碼

複製代碼

 1 package com.test.patten.factory; 2  3 public class ConcreteCreator extends Creator { 4  5     @Override 6     public Product productFactory(String type) { 7         Product product = null; 8         if(type.equals("good")){ 9             product = new GoodProduct();10         }else if (type.equals("bad")) {11             product = new BadProduct();12         }13         return product;14     }15 16 }

複製代碼

測試一下:post

複製代碼

1 package com.test.patten.factory;2 3 public class Client {4     public static void main(String args[]){5         Creator creator = new ConcreteCreator();6         creator.doSomething("good");//生產一個好的產品7         creator.doSomething("bad");//生產一個次品8     }9 }

複製代碼

個人價格是:100.0個人價格是:0.01

應用:工廠方法主要應用於工具包和框架中
設計原則:要依賴抽象,不要依賴具體類-依賴倒置原則測試

相關文章
相關標籤/搜索