《大話設計模式》Java程式碼示例(十一)之抽象工廠模式
阿新 • • 發佈:2018-12-19
抽象工廠模式(Abstract Factory):提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* 使用者實體類
*/
public class User {
// ...
}
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* 部門實體類
*/
public class Department {
// ...
}
package abstractfactory; /** * 抽象工廠方法(Abstract Factory) * 使用者介面 */ public interface IUser { void insert(User user); User getUser(int id); }
package abstractfactory; /** * 抽象工廠方法(Abstract Factory) * SqlServerUser,用於訪問SQL Server的User */ 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; } }
package abstractfactory; /** * 抽象工廠方法(Abstract Factory) * AccessUser,用於訪問Access的User */ public class AccessUser implements IUser { @Override public void insert(User user) { System.out.println("在Access中給使用者表增加一條記錄"); } @Override public User getUser(int id) { System.out.println("在Access中根據ID得到使用者表中的一條記錄"); return null; } }
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* 部門介面
*/
public interface IDepartment {
void insert(Department department);
Department getDepartment(int id);
}
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* SqlServerDepartment,用於訪問SQL Server的Department
*/
public class SqlServerDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在SQL Server中給Department表增加一條記錄");
}
@Override
public Department getDepartment(int id) {
System.out.println("在SQL Server中根據ID得到Department表中的一條記錄");
return null;
}
}
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* AccessDepartment,用於訪問Access的Department
*/
public class AccessDepartment implements IDepartment {
@Override
public void insert(Department department) {
System.out.println("在Access中給部門表增加一條記錄");
}
@Override
public Department getDepartment(int id) {
System.out.println("在Access中根據ID得到部門表中的一條記錄");
return null;
}
}
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* DataAccess,用簡單工廠模式實現
*/
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;
}
}
package abstractfactory;
/**
* 抽象工廠方法(Abstract Factory)
* 客戶端main方法
*/
public class Client {
public static void main(String[] args) {
User user = new User();
Department dept = new Department();
IUser iUser = DataAccess.createUser();
iUser.insert(user);
iUser.getUser(1);
IDepartment iDepartment = DataAccess.createDepartment();
iDepartment.insert(dept);
iDepartment.getDepartment(2);
}
}