UML:

JAVA:
工厂模式:
public class AbsFactoryTest1 {
public static void main(String[] args) {
Object user = new Object();
IFactory factory = new MysqlFactory();
UserDao userDao = factory.createMysqlUserDao();
userDao.inserUser(user);
}
}
interface IFactory{
UserDao createMysqlUserDao();
}
class MysqlFactory implements IFactory{
@Override
public UserDao createMysqlUserDao() {
return new UserDaoMysqlImpl();
}
}
interface UserDao{
Object getUser();
void inserUser(Object obj);
}
class UserDaoMysqlImpl implements UserDao{
@Override
public Object getUser() {
System.out.println("mysql库中获取所有用户信息");
return null;
}
@Override
public void inserUser(Object obj) {
System.out.println("mysql库中插入一条用户信息");
}
}
工厂模式缺点:若改变数据库,则每个new MysqlFactory()的地方都需要改动
抽象工厂模式:增加一个DataAccess类
public class AbsFactoryTest2 {
public static void main(String[] args) {
Object user = new Object();
IFactory1 factory = DataAccess.createUserDao();
UserDao1 userDao = factory.createMysqlUserDao();
userDao.inserUser(user);
}
}
class DataAccess{
private static final String db = "mysqlDb";//值可以用反射注入,或者Value注解注入
static IFactory1 createUserDao(){
if ("mysqlDb".equalsIgnoreCase(db))
return new MysqlFactory1();
return null;
}
}
interface IFactory1{
UserDao1 createMysqlUserDao();
}
class MysqlFactory1 implements IFactory1{
@Override
public UserDao1 createMysqlUserDao() {
return new UserDaoMysqlImp2();
}
}
interface UserDao1{
Object getUser();
void inserUser(Object obj);
}
class UserDaoMysqlImp2 implements UserDao1{
@Override
public Object getUser() {
System.out.println("mysql库中获取所有用户信息");
return null;
}
@Override
public void inserUser(Object obj) {
System.out.println("mysql库中插入一条用户信息");
}
}
本文探讨了工厂模式和抽象工厂模式在Java编程中的应用,通过具体的代码示例展示了如何创建数据库操作对象,以及在不同数据库类型切换时两种模式的表现。工厂模式在简单场景下直接实例化对象,而抽象工厂模式通过引入中间类来决定具体实例,增强了系统的灵活性。
1744

被折叠的 条评论
为什么被折叠?



