1. 程式人生 > >利用反射機制實現工廠模式

利用反射機制實現工廠模式

//細節:命名規則類,介面名稱都得大寫;
// 寫完程式碼記得格式化,就算是測試程式碼,貼出來也是給人看的。不能太水。
interface Fruit {
    //介面中的 public abstract 都是多餘的宣告,eclipse是發現不了的。
    //若是有心人就換編輯器,intellij idea,
    void eat();
}

class Apple implements Fruit {
    public void eat() {
        System.out.println("Apple");
    }
}

class Orange implements Fruit {
    public void eat() {
        System.out.println("Orange");
    }
}

class Factory {
    public static Fruit getInstance(String ClassName) {
        Fruit f = null;
        try {
            f = (Fruit) Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return f;
    }
}

class Hello {
    public static void main(String[] a) {
        Fruit f = Factory.getInstance("Reflect.Apple");
        if (f != null) {
            f.eat();
        }
    }
}

現在就算我們新增任意多個子類的時候,工廠類就不需要修改。

上面的程式碼雖然可以通過反射取得介面的例項,但是需要傳入完整的包和類名。而且使用者也無法知道一個介面有多少個可以使用的實現類

(程式碼是別人的,總結是自己的,就像jdk是別人的,理解是自己的一樣。)

不足之處:商品多的話,會出現海量的商品類,雖然在工廠中省去了具體判斷是什麼樣的商品,但是還是免不了去做一大堆的商品類。這個常不常用我就不敢妄加斷言啦。但是下面的三個規則還是存在的。只是工廠中省去了具體判斷。

總結下有以下三個方面,來實現一個工廠方法。

工廠規則:

有個介面,作用是提供一個規則,估計也可以是一個抽象類,提供大部分公共方法的實現也是可以的
工廠商品:

商品的種類很多,各不相同,但是都有一個共通點,那就是都遵守上面的工廠規則。具體實現可以實現介面或者繼承抽象方法等等。
工廠:

返回的是一個介面型別的商品物件,對外提供的也只是規則中包含的方法。根據商品之間的不同,來生產不同的商品。相當於父型別的引用指向其實現類或者子類,(多型),當然,也可以型別強制轉換成子類物件。就像男人是人,人不一定是男人。類似這種關係。

Apple apple = (Apple) f;

咳咳,寫錯了,人能不強轉成男人,至於為啥就自己猜吧。

編譯時沒錯,執行時就炸了,這個也是多型的一個常問的問題。就不贅述啦


相關推薦

利用反射機制實現工廠模式

//細節:命名規則類,介面名稱都得大寫; // 寫完程式碼記得格式化,就算是測試程式碼,貼出來也是給人看的。不能太水。 interface Fruit { //介面中的 public abstract 都是多餘的宣告,eclipse是發現不了的。 //若是有

C++利用反射和簡單工廠模式實現業務模組解耦

1. 業務說明 為了便於說明,舉一個簡單的例子。假設現在有一個專案需要建立一個和銀行互動的平臺,目前只接入工商銀行,後續接入其他銀行,每個銀行的業務都有差異,報文格式可能也不一致。 這裡只列舉幾個簡要的流程,僅包括拼報文,傳送報文,接收報文,解析報文,其餘整體架構以及

利用反射機制實現物件轉Map集合

分析問題 問題主要有以下幾點 如何獲取物件中的屬性的名稱? 如何獲取物件的屬性值?如何這個屬性被private修飾,該如何處理? 返回的是一個物件該如何獲取物件的屬性引數呢? 解決問題 問題1:可以使用反射來獲取POJO物件的get方法(

利用反射機制實現對象轉Map集合

public 方法 name lower pro eal param iter people 分析問題問題主要有以下幾點 如何獲取對象中的屬性的名稱?如何獲取對象的屬性值?如何這個屬性被private修飾,該如何處理?返回的是一個對象該如何獲取對象的屬性參數呢? 解決問題

Java反射機制工廠模式中的應用

在本篇文章中就不詳細介紹工廠模式,主要介紹一下反射在工廠模式中的使用,讓讀者對反射機制帶來的好處有更深的認識。 首先看一下簡單工廠模式 簡單工廠模式(simple factory)是類的建立模式,又叫靜態工廠方法(static factory method)模式。 簡單工廠

利用反射機制實現servlet的分派功能

package com.iflytek.utils; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import jav

Java反射機制工廠模式

ati 發生 sna div 忽略 event 封裝 什麽是 可能 工廠模式屬於創建型模式,它提供了一種創建對象的最佳方式。 它的特點是:客戶端的程序類不直接牽扯到對象的實例化管理,只與接口發生關聯,通過工廠類獲取指定接口的實例化對象。 簡單工廠模式如下:

利用JAVA反射機制實現調用私有方法

parse try ble cat 權限 利用 enabled tde mod 1.fragment是AccessibilityFragment的對象。須要被調用的方法的類。 setAccessible(true)並非將方法的訪問權限改成了public。而是取

利用java的反射實現工廠創建對象

傳遞 之前 illegal stack bject 運行時 做的 ace exc public static Object getInstance(Class c){ Object obj = null; try {

利用java反射機制實現List<Map<String, Object>>轉化為List<JavaBean>

tis one row 註解 網上 span mybatis star mod 最近在用mybatis做項目,遇到將date格式化顯示到easyui的問題,需要將List<Map<String, Object>>轉化為List<JavaBean

簡單的反射實現工廠模式

//第一步:宣告一個介面,用於其它類實現 public interface Fruit { public void eat(); } //第二步:宣告你需要的類,該類去實現上介面,這裡我就聲明瞭兩個 public class Apple implements Fruit{ @overri

利用Java反射機制實現物件相同欄位的複製

一、如何實現不同型別物件之間的複製問題? 1、為什麼會有這個問題? 近來在進行一個專案開發的時候,為了隱藏後端資料庫表結構、同時也為了配合給前端一個更友好的API介面文件(swagger API文件),我採用POJO來對應資料表結構,使用VO來給傳遞前端要展示的資料,同時使用DTO來進行請求

利用Java反射機制實現對象相同字段的復制

rop 對象復制 bject 不同的 turn 有一個 運算符 mes 不讓 一。如何實現不同類型對象之間的復制問題? 1、為什麽會有這個問題? 近來在進行一個項目開發的時候,為了隱藏後端數據庫表結構、同時也為了配合給前端一個更友好的API接口文檔(swagger API文

php反射機制以及利用php反射機制實現可插拔可擴充套件的外掛架構

反射是什麼? 它是指在PHP執行狀態中,擴充套件分析PHP程式,匯出或提取出關於類、方法、屬性、引數等的詳細資訊,包括註釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射API。 反射是操縱面向物件範型中元模型的API,其功能十分強大,可幫助我們構建複雜,可擴充

利用java反射機制實現讀取excel表格中的資料

如果直接把excel表格中的資料匯入資料庫,首先應該將excel中的資料讀取出來。 為了實現程式碼重用,所以使用了Object,而最終的結果是要獲取一個list如List<User>、List<Book>等,所以需要使用泛型機制去實現。下面會給出程式

利用java反射機制實現javaweb自動呼叫類的方法

public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequ

利用反射機制,獲取類的欄位、方法、並實現簡單呼叫

 這篇文章是為之後要介紹Android的ICO框架做預備的,所以,如果想最近學習Android的ICO框架的同學,可以稍微看一下。 首先,簡單介紹一下Java裡面的反射。 JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件

利用java的反射機制實現通用dao

java的反射機制前面已經講過,這裡不再贅述,這篇文章將會利用反射,來實現一個通用的dao層。 1 一般情況下的dao層 我們先來看一下,通常,我們是如何寫dao的。 public class Person { public int p

Java反射結合屬性檔案實現工廠模式

通過屬性檔案的形式配置所需要的子類 首先建立一個fruit.properties的資原始檔 內容為: apple=Reflect.Apple orange=Reflect.Orange然後編寫主類程式

如何利用快取機制實現JAVA類反射效能提升30倍

一次效能提高30倍的JAVA類反射效能優化實踐 文章來源:宜信技術學院 & 宜信支付結算團隊技術分享第4期-支付結算部支付研發團隊高階工程師陶紅《JAVA類反射技術&優化》 分享者:宜信支付結算部支付研發團隊高階工程師陶紅 原文首發於宜信支付結算技術團隊公號:野指標 在實際工作中的一些特定