抽象工厂模式主要是基于需要不同实现,切换实现方便。例如一个CMS,数据库的存储用Hibernate、TopLink实现,默认的使用 Hibernate工厂,在Hibernate工厂中生成的实例都是Hibernte实现;在使用Oracle数据库的时候为了效率改用TopLink工厂(据说TopLink在Oracle中效率高,没有测试过,也不知道 TopLink开发团队是否比Hibernte团队水平高),TopLink工厂中生成的实例都是TopLink实现。而切换它们只需要修改抽象工厂的实现便可。
抽象模式的实现步骤:
1.定义抽象工厂类
2.定义抽象工厂的实现类
每个抽象工厂的实现类可以有多个对象的生成,而这多个对象是有一定关联的。如上面举的例子中,在Hibernate工厂中生成的实例都是Hibernte实现,TopLink工厂中生成的实例都是TopLink实现。
package com.tao.pattern.abstractFactory;
public abstract class AbstractFactory {
/**
* 生成用户数据库操作类实例
*
* @return
*/
public abstract UserDAO createUserDAO();
/**
* 生成角色数据库操作类实例
*
* @return
*/
public abstract RoleDAO createRoleDAO();
}
package com.tao.pattern.abstractFactory;
public class HibernateFactory extends AbstractFactory {
@Override
public RoleDAO createRoleDAO() {
return new RoleDAOImplHibernate();
}
@Override
public UserDAO createUserDAO() {
return new UserDAOImplHibernate();
}
}
package com.tao.pattern.abstractFactory;
public class TopLinkFactory extends AbstractFactory {
@Override
public RoleDAO createRoleDAO() {
return new RoleDAOImplTopLink();
}
@Override
public UserDAO createUserDAO() {
return new UserDAOImplTopLink();
}
}
package com.tao.pattern.abstractFactory;
public interface RoleDAO { // 角色数据库操作
void save();
}
package com.tao.pattern.abstractFactory;
public class RoleDAOImplHibernate implements RoleDAO {
@Override
public void save() {
System.out.println("RoleDAOImplHibernate save!");
}
}
package com.tao.pattern.abstractFactory;
public class RoleDAOImplTopLink implements RoleDAO {
@Override
public void save() {
System.out.println("RoleDAOImplTopLink save!");
}
}
public interface UserDAO {
void save();
}
package com.tao.pattern.abstractFactory;
public class UserDAOImplHibernate implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImplHibernate save!");
}
}
package com.tao.pattern.abstractFactory;
public class UserDAOImplTopLink implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImplTopLink save!");
}
}
分享到:
相关推荐
总的来说,CMake-3.23.1-linux-x86_64.tar.gz是一个为Linux平台准备的CMake二进制发行版,它为开发者提供了便捷的方式来管理和构建跨平台的软件项目。通过正确安装和配置,可以大大提高开发效率,减少与构建环境相关...
cmake编译工具,cmake-3.23.1-windows-x86_64版
名称:cmake-3.23.2-windows-x86_64.msi 版本:3.23.2 文件类型:Windows安装程序(.msi) 描述: cmake-3.23.2-windows-x86_64.msi是用于Windows操作系统的CMake构建工具的安装程序文件。CMake是一个开源跨平台的...
《PyPI官网下载:探索spellbot-3.23.0-py3-none-any.whl》 在Python的生态系统中,PyPI(Python Package Index)是最重要的资源库,它为开发者提供了一个平台来分享和下载各种Python软件包。标题中的"PyPI 官网下载...
cmake-3.23.4-macos10.10-universal
cmake-3.23.5-macos10.10-universal
包含翻译后的API文档:javassist-3.23.1-GA-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.javassist:javassist:3.23.1-GA; 标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的...
包含翻译后的API文档:javassist-3.23.1-GA-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.javassist:javassist:3.23.1-GA; 标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...
cmake-3.23.5-macos10.10-universal.tar
cmake-3.23.4-macos10.10-universal.tar
它的设计哲学是与开发语言和构建工具保持解耦,允许用户自由选择最适合他们的工具链。 CMake的使用流程通常包括以下几个步骤: 1. **配置**:使用`cmake`命令行工具在源代码目录外创建一个构建目录,并在这个目录中...
《Eclipse Mylyn 3.23.0与Gerrit的离线集成详解》 在软件开发领域,版本控制系统如Git已经成为了不可或缺的一部分。而Gerrit作为一款基于Git的代码审查系统,广泛应用于开源项目和企业内部的代码审核流程。Eclipse ...
资源来自pypi官网。 资源全名:cassandra_driver-3.23.0-cp38-cp38-win_amd64.whl
python库。 资源全名:cassandra_driver-3.23.0-cp36-cp36m-win_amd64.whl
《Nexus 3.23.0-03:企业级仓库管理的基石》 Nexus,由Sonatype公司开发,是一款广泛应用于软件开发领域的中央仓库管理工具,它集成了Maven、Gradle等构建工具的仓库管理功能,提供对二进制组件的高效存储、检索和...
资源分类:Python库 所属语言:Python 资源全名:dependency_injector-3.23.2-cp36-cp36m-win32.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059