工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准.
以开发项目的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
分享到:
相关推荐
- 在`SimpleFactory`文件中,我们可以看到一个简单的工厂类,它根据输入类型创建相应的对象。这种模式适用于对象种类较少且不常变动的情况。 2. **普通工厂模式**(工厂方法模式): - 工厂方法模式将对象的创建...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。这种模式让我们能够将产品族的创建过程延迟到子类中,使得子类可以在不修改原有代码的情况下增加新的产品。在...
Java抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式的关键在于抽象工厂,它是一个接口或者抽象类,定义了一系列用于创建相关或依赖对象的接口。通过这种...
抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建一系列相关或相互依赖的对象时,而这些对象的类可能在运行时未知,这时可以通过抽象工厂模式来提供一个创建对象的接口,使得系统可以...
总的来说,这份压缩包提供了一个Java实现的抽象工厂模式实例,通过学习和理解这个例子,你可以深入掌握抽象工厂模式的原理和使用场景,这对于提升你的Java编程能力以及软件设计水平非常有帮助。在实际项目中,灵活...
- `factory2`、`factory3`、`factory1` 这些文件名可能是实现工厂模式的Java源代码,分别代表了不同级别的工厂类,如简单工厂、工厂方法和抽象工厂的实现。通过查看这些源代码,可以学习到如何在实际项目中应用这些...
1. **抽象工厂(Abstract Factory)**:这是模式的核心,定义了一组创建对象的接口,让子类决定实例化哪一个类。抽象工厂本身不创建任何具体产品,只负责定义创建产品的方法。 2. **具体工厂(Concrete Factory)**...
在抽象工厂模式中,提供了一个接口,用于创建相关或依赖对象的家族,而无需指定其具体的类。这在处理不同平台、系统环境或者产品族时非常有用,可以确保用户始终使用同一族的产品,而不会混用来自不同族的产品。 在...
在某些情况下,我们可以将简单工厂作为抽象工厂的一个实现,或者在系统初期使用简单工厂,随着系统复杂性的增加逐步过渡到抽象工厂模式。 至于“仅仅是抽象工厂模式”,这意味着设计完全围绕着抽象工厂模式进行,...
下面是一个简单的Java抽象工厂模式的示例: ```java // 抽象工厂接口 public interface WidgetFactory { Button createButton(); Label createLabel(); } // Windows具体工厂 public class WinWidgetFactory ...
在给定的压缩包文件"factory (1)"中,我们可能找到一个示例代码,演示了如何在Java或其他编程语言中实现这两种工厂模式。这个示例可能包括以下几个部分: 1. 抽象产品接口(Product):定义产品的公共行为。 2. ...
Java抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。在Java编程中,这种模式常用于数据库操作,特别是像增删改查(CRUD)这样的基础数据操作。在这个场景...
### Java抽象工厂模式实现热带工厂 #### 概述 在面向对象编程中,设计模式是一种在特定场景下解决软件设计问题的最佳实践方案。抽象工厂模式是GoF(Gamma、Helm、Johnson 和 Vlissides)所提出的23种设计模式之一...
在Java编程中,抽象工厂模式常用于在多个相关产品对象之间建立关联,使得更换一个产品族变得简单,无需修改客户端代码。 在“java 图书展(抽象工厂模式)”这个主题下,我们可以深入探讨以下几个关键知识点: 1. ...
首先,我们定义一个抽象工厂接口,比如`AbstractFactory`,它声明了一系列创建产品的方法,这些产品是相互关联或依赖的。例如: ```java public interface AbstractFactory { ProductA createProductA(); ...
抽象工厂模式是设计模式中的一种结构型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Java中,抽象工厂模式通常用于隔离对象的创建和使用,使得代码更加灵活,易于扩展和维护。...
从给定的代码片段来看,我们正在探讨一个基于Java实现的抽象工厂模式的应用场景——创建一个文字式的迷宫游戏。这个迷宫游戏不依赖于图形界面,而是通过文本描述来构建和体验迷宫的结构与探索过程。接下来,我们将...
在"java抽象工厂模式实例----手机工厂"中,我们可以设想有一个手机制造企业,它需要生产不同品牌的手机,如Apple、Samsung等。每个品牌手机都有其独特的零部件,如屏幕、操作系统和摄像头。抽象工厂模式就是用来处理...
无论是C++还是Java,抽象工厂模式的核心在于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这样,当需要改变产品的实现时,只需要替换工厂,而无需修改客户端代码。这种模式在软件系统中...
在“一个很好的抽象工厂实例”中,我们可以期待看到如何应用这种模式的实例。这个实例可能包含了数据库连接、数据操作和业务逻辑等部分,其中抽象工厂负责生成这些部分的对象。数据库部分可能是为了展示如何根据不同...