簡單的反射實現工廠模式
阿新 • • 發佈:2018-11-04
//第一步:宣告一個介面,用於其它類實現 public interface Fruit { public void eat(); } //第二步:宣告你需要的類,該類去實現上介面,這裡我就聲明瞭兩個 public class Apple implements Fruit{ @override public void eat(){ System.out.println("蘋果已經造出"); } } public class Orange implements Fruit{ @override public void eat(){ System.out.println("橙子已經造出"); } } //第三步:宣告你需要的工具工廠類 public class Factory() throws Exception{ //(介面新增了子類)這樣就可以不用寫new來例項化物件,解決程式碼耦合 public static Fruit getFruit(String className){ Class<?> cl = Class.forName(className); Fruit fruit = (Fruit)cl.newInstance(); return fruit; } } //第四步:寫出你需要的TetsDemo public class TestFactory{ public static void main(String args) throws Exception{ Class<?> cl = Class.forName("study0915.Factory"); Factory factory = (Factory) cl.newInstance();//例項化物件,會呼叫無參構造 Fruit fruit = factory.test("study0915.Apple"); fruit.eat();//蘋果已經造出, //或者呼叫Method method = 類.getDeclaredMethod(方法名,引數:沒有就不寫); //method.invoke(例項化物件,方法形參:比如String.class) } } //引申:在實際開發中,如果將以上的工廠模式再結合一些配置檔案(例如xml格式的檔案),就可以通過修改xml配置檔案動態定義專案中的所需的操作類,像一些主流框架都用得到。
順便貼上:類的控制訪問許可權(不寫修飾符修飾類,表示預設dafault,只能同包或者同類訪問)
public:表示其後的元素對任何人都可以使用。
protected:與private相當,差別在於繼承的類可以訪問protected修飾的元素,同包中的其他類元素也可以訪問。
default:在不指定任何關鍵字的情況下,這種許可權將發揮作用,它是一種包的訪問許可權,即在當前包中的任何元素可以訪問。
private:表示其後的元素除了型別的建立者和內部的方法之外任何人都不能訪問。
訪問許可權控制的作用:
1、讓客戶端程式設計師無法觸及他們不應該觸及的一部分資料——這些資料對於資料型別的內部操作是必須的,但並不是解決特定問題所需介面的一部分。隱藏一些實現的細節對於保護資料型別內部脆弱的部分,提高程式的安全性和可用性也是必須的。
2、允許類庫的設計者改變其內部的工作方式而不影響客戶端程式設計師。在設計者有更加優化的程式碼設計方式的時候可以隨時改變類的內部結構,而這些對於客戶端程式設計師都是不可見的,他們也無需關心類的實現細節。