java工廠方法模式


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

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

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

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

實例:

 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 }

測試一下:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM