對於這個抽象工廠的相應的代碼實現 /** * 功能:抽象工廠模式的作用 適用性 1.一個系統要獨立於它的產品的創建、組合和表示時。 2.一個系統要由多個產品系列中的一個來配置時。 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時
對於這個抽象工廠的相應的代碼實現
/** * 功能:抽象工廠模式的作用 適用性 1.一個系統要獨立於它的產品的創建、組合和表示時。 2.一個系統要由多個產品系列中的一個來配置時。 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 * 時間:2016年2月11日22:18 * 作者:cutter_point */ package com.shejimoshi.create.AbstractFactory; public interface IFactory { //這個工廠介面用來創建用戶和部門 IUser createUser(); IDepartment createDepartment(); }
1 /** 2 * 功能:抽象工廠模式的作用 3 適用性 4 1.一個系統要獨立於它的產品的創建、組合和表示時。 5 2.一個系統要由多個產品系列中的一個來配置時。 6 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 7 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 8 * 時間:2016年2月11日22:21 9 * 作者:cutter_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public interface IUser 14 { 15 //插入用戶和獲取用戶數據 16 void Insert(User user); 17 User GetUser(int id); 18 }
1 /** 2 * 功能:抽象工廠模式的作用 3 適用性 4 1.一個系統要獨立於它的產品的創建、組合和表示時。 5 2.一個系統要由多個產品系列中的一個來配置時。 6 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 7 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 8 * 時間:2016年2月11日22:21 9 * 作者:cutter_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public interface IDepartment 14 { 15 void insert(Department department); 16 17 Department getDepartment(int id); 18 }
對於IFactory派生的
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:40:47 12 * 作者:cutter_point 13 */ 14 public class AccessFactory implements IFactory 15 { 16 17 @Override 18 public IUser createUser() 19 { 20 return new AccessUser(); 21 } 22 23 @Override 24 public IDepartment createDepartment() 25 { 26 // TODO Auto-generated method stub 27 return new AccessDepartment(); 28 } 29 30 }
1 /** 2 * 功能:抽象工廠模式的作用 3 適用性 4 1.一個系統要獨立於它的產品的創建、組合和表示時。 5 2.一個系統要由多個產品系列中的一個來配置時。 6 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 7 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 8 * 時間:2016年2月11日22:21 9 * 作者:cutter_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public class SqlServerFactory implements IFactory 14 { 15 16 @Override 17 public IUser createUser() 18 { 19 // TODO Auto-generated method stub 20 return new SqlServerUser(); 21 } 22 23 @Override 24 public IDepartment createDepartment() 25 { 26 // TODO Auto-generated method stub 27 return new SqlServerDepartment(); 28 } 29 30 }
IUser派生
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:32:19 12 * 作者:cutter_point 13 */ 14 public class SqlServerUser implements IUser 15 { 16 17 @Override 18 public void Insert(User user) 19 { 20 System.out.println("插入一條用戶數據到sql:" + user.getId() + ":" + user.getName()); 21 } 22 23 @Override 24 public User GetUser(int id) 25 { 26 System.out.println("獲取一條用戶數據根據sql的id:" + id); 27 return null; 28 } 29 30 }
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:41:54 12 * 作者:cutter_point 13 */ 14 public class AccessUser implements IUser 15 { 16 17 @Override 18 public void Insert(User user) 19 { 20 System.out.println("插入一個用戶數據到access"); 21 } 22 23 @Override 24 public User GetUser(int id) 25 { 26 System.out.println("從access獲取一條數據"); 27 return null; 28 } 29 30 }
IDepartment派生的子類
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:38:48 12 * 作者:cutter_point 13 */ 14 public class SqlServerDepartment implements IDepartment 15 { 16 17 @Override 18 public void insert(Department department) 19 { 20 System.out.println("新增加一個部門"); 21 } 22 23 @Override 24 public Department getDepartment(int id) 25 { 26 System.out.println("獲取一個部門數據"); 27 return null; 28 } 29 30 }
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:45:54 12 * 作者:cutter_point 13 */ 14 public class AccessDepartment implements IDepartment 15 { 16 17 @Override 18 public void insert(Department department) 19 { 20 System.out.println("吧新增的部門添加到access資料庫中"); 21 } 22 23 @Override 24 public Department getDepartment(int id) 25 { 26 System.out.println("從access資料庫獲取department信息"); 27 return null; 28 } 29 30 }
最後我們寫一段測試代碼:
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工廠模式的作用 6 適用性 7 1.一個系統要獨立於它的產品的創建、組合和表示時。 8 2.一個系統要由多個產品系列中的一個來配置時。 9 3.當你要強調一系列相關的產品對象的設計以便進行聯合使用時。 10 4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。 11 * 時間:2016年2月11日下午10:47:37 12 * 作者:cutter_point 13 */ 14 public class Test 15 { 16 public static void abstractfactorymethod(IFactory factory) 17 { 18 User user = new User(); 19 user.setId(1); user.setName("cutter_point"); 20 Department department = new Department(); 21 department.setId(1); department.setName("this is China"); 22 23 IUser iu = factory.createUser(); 24 iu.Insert(user); 25 iu.GetUser(1); 26 27 IDepartment idp = factory.createDepartment(); 28 idp.insert(department); 29 idp.getDepartment(1); 30 } 31 32 public static void main(String[] args) 33 { 34 SqlServerFactory sqlf = new SqlServerFactory(); 35 AccessFactory accf = new AccessFactory(); 36 37 abstractfactorymethod(sqlf); 38 abstractfactorymethod(accf); 39 40 } 41 42 }
運行結果:
插入一條用戶數據到sql:1:cutter_point 獲取一條用戶數據根據sql的id:1 新增加一個部門 獲取一個部門數據 插入一個用戶數據到access 從access獲取一條數據 吧新增的部門添加到access資料庫中 從access資料庫獲取department信息