1. 程式人生 > >java 之 抽象工廠模式(大話設計模式)

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

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 implements
IFactory{ @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 之 抽象工廠模式(大話設計模式)