10、抽象工厂模式(Abstract Factory):提供了一个创建一系列相关或相互依赖对象的接口
而无需指定它们具体的类。它最大的好处是易于交换产品系列,例如数据库的更换,开发了一个项目
有的客户要使用MySql,有的可能要使用Oracle。这种情况下我们就可以使用抽象工厂模式
/**
* 抽象工厂类
*/
public interface IFactory {
IUser createUser();
IDepartment creatteDepartment();
}
/**
* Project Name:pattern_01
* File Name:MySqlFactory.java
* Package Name:org.jiajun.pattern.test10
* Date:2017年4月27日下午5:00:48
* Copyright @ 2010-2017 河南乐享教育科技股份有限公司 All Rights Reserved.
*
*/
/**
* MySql数据工厂
*/
public class MySqlFactory implements IFactory {
@Override
public IUser createUser() {
return new MySqlUser();
}
@Override
public IDepartment creatteDepartment() {
return new MySqlDepartment();
}
}
/**
* 用户数据访问接口
*/
public interface IUser {
void insert(User e);
User getUser(int id);
}
//测试用例
public class TestCase {
public static void main(String[] args) {
IFactory factory = new MySqlFactory();
factory.createUser().insert(null);
}
}
而无需指定它们具体的类。它最大的好处是易于交换产品系列,例如数据库的更换,开发了一个项目
有的客户要使用MySql,有的可能要使用Oracle。这种情况下我们就可以使用抽象工厂模式
/**
* 抽象工厂类
*/
public interface IFactory {
IUser createUser();
IDepartment creatteDepartment();
}
/**
* Project Name:pattern_01
* File Name:MySqlFactory.java
* Package Name:org.jiajun.pattern.test10
* Date:2017年4月27日下午5:00:48
* Copyright @ 2010-2017 河南乐享教育科技股份有限公司 All Rights Reserved.
*
*/
/**
* MySql数据工厂
*/
public class MySqlFactory implements IFactory {
@Override
public IUser createUser() {
return new MySqlUser();
}
@Override
public IDepartment creatteDepartment() {
return new MySqlDepartment();
}
}
/**
* 用户数据访问接口
*/
public interface IUser {
void insert(User e);
User getUser(int id);
}
//测试用例
public class TestCase {
public static void main(String[] args) {
IFactory factory = new MySqlFactory();
factory.createUser().insert(null);
}
}