java 之 抽象工廠模式(大話設計模式)
阿新 • • 發佈:2017-12-06
out 簡單 ges 關系 logs 只需要 切換 ima .get
看了幾次抽象工廠模式,每次查看都需要重新理解一次,可能是涉及的類和接口比較多,所以比較難縷清的關系吧!在筆者看來,我們還是要吸取其思想而不是生搬硬套。
來看下類圖:
大話設計模式-類圖
看類圖已經很亂了,來簡單的梳理下。我們只看接口,這樣就不難看出實際上是抽象工廠生產抽象產品的過程,而具體實現都是各自的實現類來做。
看下具體的demo:
工廠層
/** * 工廠接口 */ public interface IFactory { public IUser createUser(); public IDepartment createDepartment(); }
/*** Mysql工廠 */ public class MysqlFactory implements IFactory{ @Override public IUser createUser() { return new UserMapper(); } @Override public IDepartment createDepartment() { return new DepartmentMapper(); } }
/** * sqlserver工廠 */ public class SqlServerFactory implementsIFactory{ @Override public IUser createUser() { return new UserMapper(); } @Override public IDepartment createDepartment() { return new DepartmentMapper(); } }
產品層
/** * 部門層接口 */ public interface IDepartment { public int saveDepartment(Department department);public IDepartment getDepartment(int id); }
/** * 角色數據層接口 */ public interface IUser { public int saveUser(User user); public IUser getUser(int id); }
/** * 部門數據層 */ public class DepartmentMapper implements IDepartment{ @Override public int saveDepartment(Department department) { System.out.println("保存了部門"); return 1; } @Override public IDepartment getDepartment(int id) { System.out.println("得到了一個部門"); return null; } }
/** * 角色數據層 */ public class UserMapper implements IUser { @Override public int saveUser(User user) { System.out.println("保存Uer"); return 1; } @Override public IUser getUser(int id) { System.out.println("得到一個User"); return null; } }
客戶端及實體類
/** *用戶實體類 */ public class User{ }
/** * 部門實體類 */ public class Department { }
/** * 客戶端 */ public class Test { public static void main(String[] args) { // IFactory factory = new MysqlFactory(); IFactory factory = new SqlServerFactory(); IUser userMapper = factory.createUser(); userMapper.getUser(userMapper.saveUser(new User())); } }
如果我們切換數據庫,我們只需要切換工廠就可以了,其他的代碼不需要改。
以上是筆者對抽象工廠的理解,希望能幫助學習抽象工廠的小夥伴!
java 之 抽象工廠模式(大話設計模式)