工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准.
以开发项目的DAO层为例,在项目中客户的需求是常常变动的,临时更换数据库的需求也是常常发生的,那我们要如何解决跨数据库的功能,这里就要使用到抽象工厂模式了.工厂模式常常用于创建多系列化的对象(如Orale系列,MySql系列)
1.首先定义相关接口(与平常的做法没什么区别)
Java代码
// 角色表DAO接口
interface IroleDao {
void insert();
void update();
}
// 用户表DAO接口
interface IuserDao {
void find();
void delete();
}
2.不同的数据库有不同的SQL语句所以实现时必须分数据库来实现
Java代码
// 用户表Oralce数据库DAO
class OracleuserDao implements IuserDao {
public void delete() {
System.out.println("Oralce 删除用户表数据");
}
public void find() {
System.out.println("Oralce 查询用户表数据");
}
}
// 用户表MySql数据库DAO
class MySqluserDao implements IuserDao {
public void delete() {
System.out.println("MySql 删除用户数据");
}
public void find() {
System.out.println("MySql 查询用户数据");
}
}
// 角色表Oracle数据库DAO
class OracleroleDao implements IroleDao {
public void insert() {
System.out.println("Oralce 对角色表插入数据");
}
public void update() {
System.out.println("Oracle 对角色表更新数据");
}
}
// 角色表MySql数据库DAO
class MySqlroleDAO implements IroleDao {
public void insert() {
System.out.println("MySql 对角色表插入数据");
}
public void update() {
System.out.println("Mysql 对角色表更新数据");
}
}
这里增加了一套DAO的实现 (与平时有所不同,如果有10个数据库就要加上10种不同的实现,比较麻烦呀)
3.定义DAO工厂接口与实现(利用java反射机制生产出你需要的DAO如:userDAO,roleDao)
Java代码
// DAO工厂
abstract class DaoFactory {
public static DaoFactory getInstance(String classname) {
DaoFactory dao = null;
try {
dao = (DaoFactory) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return dao;
}
abstract IuserDao getuserdao();
abstract IroleDao getroledao();
}
// Oralce工厂
class OracleFactory extends DaoFactory {
public IroleDao getroledao() {
return new OracleroleDao();
}
public IuserDao getuserdao() {
return new OracleuserDao();
}
}
// MySql工厂
class MysqlFactory extends DaoFactory {
public IroleDao getroledao() {
return new MySqlroleDAO();
}
public IuserDao getuserdao() {
return new MySqluserDao();
}
}
4. 定义配置文件
Java代码
class Config {
// Oralce
static final String ORALCE = "org.abc.OracleFactory";
static final String MYSQL = "org.abc.MysqlFactory";
}
配置文件可以定义到XML中去(好处:修改配置项之后不需要对JAVA文件进行编译.)
5.测试你的输出的DAO
Java代码
public class Dao {
public static void main(String[] args) {
DaoFactory.getInstance(Config.ORALCE).getroledao().insert();
DaoFactory.getInstance(Config.MYSQL).getroledao().insert();
}
}
总结
使用条件:一系列接口有一系列的实现
如上IuserDao、IroleDao等一系列的接口,他们可以有一系列的实现(Oracle方式、MySql方式)
OracleuserDao、OracleroleDao、MySqluserDao、MySqlroleDAO
组成元素(以上面例子)
一系列接口:IuserDao、IroleDao
一系列实现:Oracle系列、MySql系列
系列工厂类:Oracle系列工厂类、MySql系列工厂类(必须继承抽象工厂类)
抽象工厂类:DaoFactory
分享到:
相关推荐
在Java中,抽象工厂模式通常包含以下角色: 1. **抽象工厂(Abstract Factory)**:这是工厂模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。在这个例子中,这个接口可能是`Abstract...
### Java抽象工厂模式实现热带工厂 #### 概述 在面向对象编程中,设计模式是一种在特定场景下解决软件设计问题的最佳实践方案。抽象工厂模式是GoF(Gamma、Helm、Johnson 和 Vlissides)所提出的23种设计模式之一...
在C++和Java这两种编程语言中,抽象工厂模式的应用相当广泛,特别是在需要跨平台或者需要一组相关的对象协同工作时。 首先,我们来看看C++中的抽象工厂模式。在C++中,我们通常通过定义接口(纯虚函数)来实现抽象...
Java抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式的关键在于抽象工厂,它是一个接口或者抽象类,定义了一系列用于创建相关或依赖对象的接口。通过这种...
工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...
2. **具体工厂类(Concrete Factories)**:实现了抽象工厂接口,负责创建具体的产品对象。例如,我们可以有`SimpleCalculatorFactory`和`ScientificCalculatorFactory`,它们分别创建简单计算器和科学计算器的按钮...
总的来说,这份压缩包提供了一个Java实现的抽象工厂模式实例,通过学习和理解这个例子,你可以深入掌握抽象工厂模式的原理和使用场景,这对于提升你的Java编程能力以及软件设计水平非常有帮助。在实际项目中,灵活...
"Java抽象工厂设计模式的研究与实现" Java抽象工厂设计模式是一种创造型设计模式,属于factory pattern的升级版本。它提供了一种解决方案,以便在不指定具体实现类的情况下,创建复杂对象的家族。 Java抽象工厂...
- `factory2`、`factory3`、`factory1` 这些文件名可能是实现工厂模式的Java源代码,分别代表了不同级别的工厂类,如简单工厂、工厂方法和抽象工厂的实现。通过查看这些源代码,可以学习到如何在实际项目中应用这些...
在"JAVA设计模式之抽象工厂模式"的示例中,可能会包含这些角色的实现以及如何在实际场景中应用抽象工厂模式的解释和示例代码。这个压缩包可能包含了详细的设计和实现,帮助学习者深入理解抽象工厂模式的工作原理及其...
因此,这些文件可能与使用Java抽象工厂模式实现的数据库操作有关。`lgxCompany`可能是某个特定的数据库表或业务实体类,与公司的数据操作相关。 总的来说,"java抽象工厂增删改查"这个主题涉及到如何利用设计模式来...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
在某些情况下,我们可以将简单工厂作为抽象工厂的一个实现,或者在系统初期使用简单工厂,随着系统复杂性的增加逐步过渡到抽象工厂模式。 至于“仅仅是抽象工厂模式”,这意味着设计完全围绕着抽象工厂模式进行,...
在软件设计模式中,"简单工厂"和"抽象工厂"是两种常见的创建型设计模式,它们主要用于对象的创建。这两种模式都是为了将对象的创建过程封装起来,使得客户端代码无需关心具体的实现细节,只需调用工厂提供的接口即可...
在Java中,抽象工厂模式的实现稍微不同,因为Java没有显式的接口关键字,而是通过抽象类或者接口来定义抽象工厂。假设我们有`AbstractFactory`类或接口,其中包含`createProductA()`和`createProductB()`等方法。...
下面是一个简单的Java抽象工厂模式的示例: ```java // 抽象工厂接口 public interface WidgetFactory { Button createButton(); Label createLabel(); } // Windows具体工厂 public class WinWidgetFactory ...
在Java编程中,抽象工厂模式常用于在多个相关产品对象之间建立关联,使得更换一个产品族变得简单,无需修改客户端代码。 在“java 图书展(抽象工厂模式)”这个主题下,我们可以深入探讨以下几个关键知识点: 1. ...
在Java中,我们可以用类和接口来实现抽象工厂模式。 首先,我们定义一个抽象工厂接口,比如`AbstractFactory`,它声明了一系列创建产品的方法,这些产品是相互关联或依赖的。例如: ```java public interface ...
在Java中,我们可以通过以下步骤实现抽象工厂模式: 1. 首先,定义抽象产品接口,如`Button`和`Dialog`。 2. 然后,为每个抽象产品创建其具体实现,如`WindowsButton`、`WindowsDialog`、`MacOSButton`和`...
这样,当需要更换不同的产品族时,只需要替换对应的抽象工厂实现即可,提高了系统的可扩展性和可维护性。 抽象工厂模式主要由四个角色组成: 1. **抽象工厂(Abstract Factory)**:这是定义一个创建一系列相关或...