天天看點

工廠模式-java工廠模式

文章目錄

  • 工廠模式
    • 設計模式
    • 設計模式的分類
    • 工廠模式
    • 小項目應用:i18n國際化

工廠模式

設計模式

  • 設計模式是前輩總結的設計經驗
  • 設計模式的目标是代碼更容易了解,更容易維護
  • 通過設計模式可以讓代碼更加可靠

設計模式的分類

  • 建立型模式:如何更加精巧的建立某些對象是所有其它模式的基本,工廠模式就是最簡單最重要的一種設計模式。
  • 結構型模式:在軟體結構上通過重構和抽象,讓軟體的結構更有條理,更容易維護。
  • 行為型模式:針對現實中某種具體的行為場景。

工廠模式

  • 用于隐藏建立對象的細節(以中間人的角色幫助選擇指定的類并建立對象);
  • 工廠模式核心:工廠類Factory(中間人的角色就是工廠類);
  • 工廠模式可以細分為簡單工廠、工廠方法與抽象工廠(簡單工廠是最簡單使用最廣的模式);
工廠模式-java工廠模式
工廠模式-java工廠模式

由于具體實作類都是相似的,是以抽象出一個抽象接口,然後建立一個工廠類。根據客戶的需求由工廠類自動的建立具體實作類。客戶類不再直接面向具體的實作類,而是持有一個抽象的接口,工廠類傳回的也是這個接口。是以客戶類不需要建立了什麼具體實作類,隻要知道工廠類傳回的抽象接口就可以了。

小項目應用:i18n國際化

抽象接口:

package com.imooc.factory.i18n;

/**
 * 國際化的頂級抽象 Internationalization
 */
public interface I18N {
    public String getTitle();
}
           

工廠類:

package com.imooc.factory.i18n;

/**
 * 工廠類:簡化對象建立的過程
 * 使用者直接面向工廠類就可以了
 */
public class I18NFactory {
    public static I18N getI18NObject(String area) {
        //輸入一個具體的區域,傳回一個I18N某個具體實作類的對象
        if (area.equals("china")) {
            return new Chinese();
        }else if(area.equals("spain")){
            return new Spanish();
        }else if(area.equals("italy")){
            return new Italian();
        }else {
            return null;
        }
    }
}
           

入口類:

package com.imooc.factory;

import com.imooc.factory.i18n.I18N;
import com.imooc.factory.i18n.I18NFactory;

/**
 * 軟體核心入口類,根據不同分地區顯示不同語言
 */
public class Software {
    public static void main(String[] args) {
        I18N i18n = I18NFactory.getI18NObject("spain");
        System.out.println(i18n.getTitle());
    }
}