1. 程式人生 > >通過反射優化工廠模式

通過反射優化工廠模式

1.工廠模式

工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如A a=newA() 工廠模式也是用來建立例項物件的,所以以後new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你係統帶來更大的可擴充套件性和儘量少的修改量。

2.不足

當增加一個子類的時候需要修改工廠類,這樣很麻煩

3.利用反射改進

思路:工廠類通過反新的子類的路徑,並使用getInstace()方法來獲取一個類的例項。
實現
package com.learn.controller;

public class Factory {
    public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
            man m = reflectFactory.getInstance("com.learn.controller.Chinese");
            System.out.println(m.sayHello());
    }
}

interface
man
{ String sayHello(); } class Chinese implements man { public String sayHello() { return "nihao"; } } class Waiguoren implements man { public String sayHello() { return "hello"; } } class reflectFactory{ public static man getInstance(String mantype) throws
ClassNotFoundException, IllegalAccessException, InstantiationException
{ man man = null; man = (man) Class.forName(mantype).newInstance(); return man; } }

執行結構如下:

nihao

4.結合屬性檔案優化

思路: 把所有類的完整路徑都寫到檔案裡然後讀檔案傳入工廠類中去只想say()函式
實現:

先假裝讀到了配置檔案儲存在了一個數組中,就是下面的mans陣列

public class Factory {
    static String[] mans = new String[]{
            "com.learn.controller.Chinese",
            "com.learn.controller.Waiguoren"
    };

    public static void main(String[] as) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        man m = reflectFactory.getInstance(mans[0]);
        System.out.println(m.sayHello());
    }
}
執行結果:

你猜【尷尬臉】

5.結合註解優化

待更新

相關推薦

通過反射優化工廠模式

1.工廠模式 工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如A a

簡單的反射實現工廠模式

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

Java 反射工廠模式

一.簡單工廠模式 //介面 package Factory; public interface Fruit { public void eat(); //吃 } //實現介面類 package Factory; public class

反射工廠模式之間不可告人的祕密

認識反射機制 初識反射 反射是指物件的反向操作,既然是反向操作處理。那先來觀察一下正向的操作。 import java.util.Date; public static void main (String[] args){ Date

工廠模式(Factory Pattern)和java反射機制優化思考

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">GOF的工廠模式是最基礎的一種建立型設計模式,其適用於建立同一介面的不

工廠模式 ioc dom4j 反射之我的一點理解

nat Coding println hibernate return 控制反轉 加載 light 異常 工廠模式 //工廠模式我的理解 //第一次調用沒有實例化的對象時 會去內存中查找(棧) //如果沒有找到,就去xml配置中查找className和他相同

一(3)抽象工廠模式&&簡單工廠+反射改進抽象工廠

reat end ssi 一行代碼 rate imp 缺點 接口 ner 1 抽象工廠?   抽象工廠用在既有產品樹,又有產品族的場合。     產品樹:奔馳旗下的跑車和商務車構成產品樹    產品族:奔馳旗下的跑車與奧迪旗下的跑車構成產品族。/*缺點:此時如果需要增加一個

Java基礎---單例模式 觀察者模式 反射 工廠模式

package cn.itcast.single; /*  單例設計模式:     懶漢單例設計模式(執行緒安全問題 的解決方案):   步驟:   1. 私有化建構函式。   2. 宣告

反射機制下的工廠模式(寫完具體類,馬上就能用)

先修知識 多型 介面與父類可作返回型別,引用宣告型別. 實現類與繼承類可作構造型別,反射強制轉換型別,反射(子類.class)獲取元型別 反射 反射一定是用在通用的場景,故利用反射機制時不應該出現

C++雜談 簡單工廠模式 裝備 反射機制技能

反射機制的實現 Reflect.h #pragma once #include <string> #include <map> #include <iostream&g

通過例項說設計模式——簡單工廠模式

本文我們通過例項的方式來簡單描述一下簡單工廠模式的由來及其作用,話說我們現在需要開發一個圖形介面工具,然後將這個工具提供給一個客戶去使用,系統初期我們只需要畫一個圓(Circle)和一個三角形(Triangle)即可。那麼我們的工具就按照如下的方式設計。

通過例子學設計模式之--工廠方法模式以及使用場景說明(C++實現)

        簡單工廠模式有如下問題:         (1)工廠類職責不單一。比如裝置類工廠,工廠一併生產USB,並口,串列埠,等等之類的裝置,職責不單一,而且switch--case分支有可能比較多。         (2)違背開閉原則。比如裝置類工廠,增加一個WIF

通過寫簡單的計算器程式理解繼承、多型、簡單工廠模式

用C++寫一個簡單的計算器,支援加減乘除運算,使其易於維護,可擴充套件,可複用等。程式碼示例如下://   ----------- Operation.h#ifndef __OPERATION_20180223_H__ #define __OPERATION_20180223

設計模式學習(十四)————抽象工廠模式(使用Qt框架的反射技術——根據字串動態建立類來實現)

抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類! 這個例子也可以用簡單工廠模式+反射+讀取配置檔案來完成,這樣更加簡潔!!! 普通的抽象工廠模式 下面通過一個模擬訪問資料庫的例子來進行說明: #ifndef US

通過反射機制/反序列化破解單例模式

一、懶漢式單例 package edu.aeon.model.singleton; /** * 單例模式:懶漢式(類裝載及建立) * 步驟: * 1.構造器私有化(防止外部new) * 2.提供靜態的、私有的代表該物件的例項的空引用 * 3.提供靜態的、公

Java反射生成物件注入spring(結合工廠模式)

利用工廠模式進行程式碼擴充套件,而不用修改原來程式碼。在配置檔案配置要生成的類,通過反射交由工廠生成物件,並將此物件交給spring管理,在專案中遇到此問題並予以解決,做一下記錄。 package cn.easted.edm.core.factory.da

策略模式+工廠模式優化if...else if...else if結構

首先,按照if...else if語句來實現打折商品的例子,程式碼如下: public class Example { public Double calRecharge(Double charge ,RechargeTypeEnum type ){

通過例子學設計模式之--抽象工廠模式以及使用場景說明(C++實現)

    考慮這樣一個場景,PC機有IBM和Lenvo2個品牌。兩者都有各自的CPU,記憶體RAM,硬碟Disk,網絡卡NetCard等等十幾個元件。如何建立這些產品物件呢?      (1)如果用簡單工廠,比如使用一個工廠(PC工廠),或者2個工廠(IBM工廠,Lenvo工

抽象工廠模式(JAVA反射)

簡單工廠模式 awt 相同 exce 清晰 win 技術分享 null str 實例代碼(JAVA):模式動機 在工廠方法模式中具體工廠負責生產具體的產品,每一個具體工廠對應一種具體產品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或者一組重載的

Java 反射+工廠模式實現解耦

在實際開發中,工廠模式是經常被用到的。 工廠模式的好處: 工廠模式可以達到類的解耦。 工廠類中工廠方法過多也是個問題,每新增一個類,則新增一個工廠方法,這會導致工廠方法過多。恰好,反射可以建立類的例項物件,而且可以採用統一操作Class.forNa