国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

抽象工廠模式

2019-11-08 18:42:09
字體:
來源:轉載
供稿:網友

抽象工廠模式:為一組相關或者相互依賴的對象提供一個接口,而且無需指定他們的具體類。

工廠方法模式:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。

用了工廠方法模式的數據訪問程序

User.java用戶類(只有ID和Name兩個字段)

public class User { PRivate int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

IUser.java-用于對User進行操作的通用接口

public interface IUser { void insert(User user); User getUser(int id);}

accessUser.java-對數據庫操作的具體實現

public class AccessUser implements IUser{ @Override public void insert(User user) { System.out.println("在Access中給User表增加一條記錄"); } @Override public User getUser(int id) { System.out.println("在Access中根據ID獲取User表中的一條記錄"); return null; }}

SqlServerUser.java-對數據庫操作的具體實現

public class SqlServerUser implements IUser{ @Override public void insert(User user) { System.out.println("在SQL Server中給User表增加一條記錄"); } @Override public User getUser(int id) { System.out.println("在SQL Server中根據ID獲取User表中的一條記錄"); return null; }}

IFactory.java-用于創建訪問user表的對象

public interface IFactory { IUser createUser();}

sqlServerFactory.java-實現IFactory接口,創建sqlServerUser對象

public class SqlServerFactory implements IFactory{ @Override public IUser createUser() { return new SqlServerUser(); }}

AccessFactory.java-實現IFactory接口,創建AccessUser對象

public class AccessFactory implements IFactory{ @Override public IUser createUser() { return new AccessUser(); }}

測試

public class Test { public static void main(String[] args) { User user = new User(); SqlServerFactory sqlServerFactory = new SqlServerFactory(); IUser createUser = sqlServerFactory.createUser(); createUser.insert(user); createUser.getUser(1); }}

輸出

改進(去除IFactory、SqlServerFactory、AccessFactory三個工廠,取而代之DataAccess類,用一個簡單工廠模式實現)

DataAccess.java

public class DataAccess { private static final String db="SqlServer";// private static final String db="Access"; public static IUser createUser(){ IUser result=null; switch(db){ case "SqlServer":result=new SqlServerUser(); break; case "Access":result=new AccessUser();break; } return result; } public static IDepartment createDepartment(){ IDepartment result=null; switch(db){ case "SqlServer":result=new SqlServerDepartment(); break; case "Access":result=new AccessDepartment();break; } return result; }}

測試

public class Test2 { public static void main(String[] args) { User user = new User(); Department department = new Department(); IUser iu = DataAccess.createUser(); IDepartment id = DataAccess.createDepartment(); iu.insert(user); iu.getUser(1); id.insert(department); id.getUser(1); }}

用反射+抽象工廠進行數據訪問

通過反射實現程序由編譯時創建對象變為運行時創建對象,通過字符串來實例化對象。 DataAccessR類利用反射技術,取代IFactory、SqlServerFactory、AccessFactory三個工廠

DataAccessR.java

public class DataAccessR { private static final String commonPackageName="zx.abstractfactory.test2"; private static final String db="sqlserver"; public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ String className=commonPackageName+"."+db+".SqlServerUser"; System.out.println("SqlServerUser的全路徑名 "+className); IUser sqlServerUser=(SqlServerUser)Class.forName(className).newInstance(); return sqlServerUser; } public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException{ String className=commonPackageName+"."+db+".SqlServerDepartment"; System.out.println("SqlServerDepartment的全路徑名 "+className); IDepartment sqlServerDepartment=(SqlServerDepartment)Class.forName(className).newInstance(); return sqlServerDepartment; }}

測試

public class TestR { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { User user = new User(); Department department = new Department(); IUser createUser = DataAccessR.createUser(); IDepartment createDepartment = DataAccessR.createDepartment(); createUser.insert(user); createUser.getUser(1); createDepartment.insert(department); createDepartment.getUser(1); System.out.println("testR"); }}

輸出


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通州区| 集安市| 河北省| 措勤县| 伊金霍洛旗| 融水| 东兰县| 阿坝县| 射阳县| 佛教| 嵊泗县| 太仆寺旗| 崇明县| 简阳市| 怀仁县| 灌阳县| 崇信县| 灵璧县| 梅河口市| 福贡县| 霞浦县| 义马市| 临朐县| 江门市| 平南县| 漳平市| 容城县| 崇礼县| 宣汉县| 和政县| 丹东市| 永平县| 九江市| 潞西市| 江城| 丰县| 达拉特旗| 宁夏| 当涂县| 巨野县| 密山市|