1. 程式人生 > >Java實現抽象工廠模式+java的反射的機制

Java實現抽象工廠模式+java的反射的機制

Java的反射機制:

  JAVA反射機制是就是執行的狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。通過反射機制可以動態的訪問類的屬性和方法以及欄位。

最常用的反射機制就是:(當然  reflect 類還有其他的很多的方法 不一一列舉)

<pre name="code" class="java">Class.forName("obj name").newInstance();                                                                                               

抽象工廠模式:

抽象工廠角色: 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。在java中它由抽象類或者介面來實現。
具體工廠角色:它含有和具體業務邏輯有關的程式碼。由應用程式呼叫以建立對應的具體產品的物件。在java中它由具體的類來實現。
抽象產品(方法)角色:它是具體產品繼承的父類或者是實現的介面。在java中一般有抽象類或者介面來實現。

抽象工廠通常和java的反射機制緊密聯絡在一起。當遇到新的具體工廠角色出現時,如果沒有java的反射機制,我們需要首先建立具體的工廠類,在UI(客戶端)修改相關程式碼, 將具體的工廠的例項化程式碼加入。嚴重違反了開閉原則。

但是通過java的反射機制就可以將抽象工廠模式的實現對修改封閉,在拓展開放,將新的具體的工廠類名的寫入xml檔案中,通過讀取xml檔案就可以讀取到新增的具體工廠的類名,根據類名自動生成相應類的例項化。

具體程式碼如下:

抽象工廠角色:

//iifactory.java
public interface iffactory {
      public void createob();
}

具體工廠角色:

//javafactory
public class javafactory implements iffactory{

	@Override
	public void createob() {
		// TODO Auto-generated method stub
		System.out.println("create java object");
	}
      
}

//cppfactory
public class cppfactory  implements iffactory{

	@Override
	public void createob() {
		// TODO Auto-generated method stub
		System.out.println("create c++ object");
	}
    
}

//csharpfactory
public class csharpfactory implements iffactory{

	@Override
	public void createob() {
		// TODO Auto-generated method stub
		System.out.println("create a csharp object");
	}
     
}
testUI(客戶端)
public class testUI {
    private String objectstr;
    public void setselect(String key){
    	this.objectstr=key;
    }
    public String getselect(String key){
    	return this.objectstr;
    }
    public iffactory createobj(){
    	iffactory iffac = null;
    	try{
    		//
    		iffac=(iffactory) Class.forName(objectstr).newInstance();
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return iffac;
    }
    public static void main(String[] args) {
		testUI test=new testUI();
		iffactory iffac=null;
		test.setselect("cppfactory");
		iffac=test.createobj();
		iffac.createob();
	}
}
執行結果:

因此我們如果再有其他的具體的工廠加入,首先建立具體的工廠類去生產具體的物件,接著講具體的類名寫入xml檔案中,通過xml檔案的具體字串類名,去實現具體工廠的例項化。

相關推薦

Java實現抽象工廠模式+java反射機制

Java的反射機制:   JAVA反射機制是就是執行的狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件

設計模式抽象工廠模式(Java實現)

抽象工廠是一個超級工廠,用來建立其他工廠,又稱為工廠的工廠,也就是對各種不同的工廠再次進行抽象。在抽象工廠模式中,介面負責建立相關物件的工廠, 每個生成的工廠可以按照工廠模式提供物件。 首先建立兩個介面然後實現具體類 //再建立一個介面Plant interface Plant {

抽象工廠模式(JAVA反射)

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

java抽象工廠模式(大話設計模式

out 簡單 ges 關系 logs 只需要 切換 ima .get 看了幾次抽象工廠模式,每次查看都需要重新理解一次,可能是涉及的類和接口比較多,所以比較難縷清的關系吧!在筆者看來,我們還是要吸取其思想而不是生搬硬套。 來看下類圖: 大話設計模式-類圖 看類圖已經很亂了

Java實現簡單工廠模式

1.3 程式碼規範 如果你想做一個計算器的話,是怎樣操作的 C#實現的。和Java語法差不多 1.8 業務封裝 採用面向物件思想將業務計算邏輯和介面邏輯分開。 Operation類 這個只是運用了面向物件的封裝。下面是實現繼承和多型。

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

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

《大話設計模式》c++實現 抽象工廠模式

  為了更清晰地理解工廠方法模式,需要先引入兩個概念: 產品等級結構 :產品等級結構即產品的繼承結構,如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。

golang實現抽象工廠模式

在專案過程中,遇到某處需要使用工廠模式,因此寫了個測試程式碼進行測試, 首先定義了interface Worker,其中包含一個介面Work(task *string) 然後定義建立Worker的i

大話設計模式抽象工廠模式總結-java實現

注:示例來自《大話設計模式》 現有如下需求 寫一個基本的資料訪問程式 資料庫用SqlServer 簡單程式碼實現如下 使用者類 package Test15; public class User { private int id;

結合Java反射用簡單工廠模式改進抽象工廠模式

前一篇簡單介紹了抽象工廠模式,結合Java的反射機制,可以用簡單工廠模式來改進抽象工廠模式,減少類的數量,增加可維護性。UML圖如下: 去除IFactory、SqlserverFactory和AccessFactory三個工廠類,取而代之的是DataAccess類,用一

抽象工廠模式Java與Kotlin版)

class das list 新的 ges extends 知識 簡單工廠 所有 前文推送 設計模式 簡單工廠模式(Java與Kotlin版) 工廠方法模式(Java與Kotlin版) Kotlin基礎知識 Kotlin入門第一課:從對比Java開始

Java設計模式工廠模式(二):抽象工廠模式

mar 模式 blank http left taxi ref www. app 2碳依5FVL冒傲3http://t.docin.com/etw488 am懦7鈉N山段9慌Q闌http://shequ.docin.com/ipu5657 iK1諾5N鍛認EUK剖嘲肆h

Java設計模式(3)——抽象工廠模式

抽象工廠模式 圖片 uml eve 實例 alt pla pub closed   抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個接口,使得客戶端在不必指定產品的具體類型的情況下,能夠創建多個產品族的產品對象。 一、產品族和產品

java設計模式-----3、抽象工廠模式

log 情況下 屬於 運行 title nds 們的 println 支持   抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況

Java設計模式(二)之建立型模式抽象工廠模式

例子背景: 隨著客戶的要求越來越高,寶馬車需要不同配置的空調和發動機等配件。於是這個工廠開始生產空調和發動機,用來組裝汽車。這時候工廠有兩個系列的產品:空調和發動機。寶馬320系列配置A型號空調和A型號發動機,寶馬230系列配置B型號空調和B型號發動機。   一、概念:

設計模式之普通工廠模式(Java實現版本)

工廠模式是設計模式中非常容易理解的模式之一。簡單來說,工廠模式就是替代new操作的一種方式,比如我們去飯店要茶水,工廠就像是服務員,只要告訴服務員我要茶水,服務員就會把茶壺拿來,而不需要我們自己去拿茶水(好比於在main方法中直接new Tea();) 接下來貼上例子,為了方便,把所有的程式碼都

Java 設計模式工廠方法模式抽象工廠模式

一、前期回顧 上一篇《Java設計模式之單例模式》詳細介紹了單例模式,介紹了單例模式的使用場景,優缺點,同時也寫了兩種常見的單例模式寫法,懶漢式單例模式和餓漢氏單例模式,當然,單例模式的寫法還有很多,比如,列舉單例模式,靜態內部類單例模式等。有興趣的可以自行查詢資料。本篇開始介紹單例

java常用設計模式--抽象工廠模式簡單例子

package com.ruanyun;/** * @Auther: maxw * @Date: 2018/11/12 11:23 * @Description:抽象工廠模式:與工廠方法模式不同的是,工廠方法模式中的工廠只生產單一的產品,而抽象工廠模式中的工廠生產多個產品。 * 還有個抽象工廠方法模式 只需要

Java設計模式工廠方法模式&抽象工廠模式

工廠方法模式與抽象工廠模式都是設計模式中重要而且常見的模式。       工廠方法模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。 通用類圖如下:        

java設計模式精講 Debug 方式+記憶體分析 第6章 抽象工廠模式

抽象工廠模式 6-1 抽象工廠講解 6-2 抽象工廠coding 6-3 抽象工廠原始碼解析 6-1 抽象工廠講解 工廠方法模式針對的就是產品等級結構 而抽象方法模