`

设计模式之 Abstract Factory - 抽象工厂模式

阅读更多

 

 

工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 

以开发项目的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 
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 

 

分享到:
评论

相关推荐

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...

    创建型设计模式----抽象工厂模式

    抽象工厂模式是创建型设计模式的一种,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定具体类。这种模式的核心在于它允许客户端代码与具体实现细节解耦,使得更换一个产品族变得更为容易。...

    设计模式----抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java或其他面向...

    创建型-抽象工厂模式(Abstract Factory)

    此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    走进设计模式之抽象工厂(Abstract Factory)

    总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    java常用设计模式-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    设计模式-抽象工厂-Java 源码

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而具体的对象族由子类决定。这种模式允许系统在不指定具体产品的前提下,能够创建一系列相关或相互依赖的对象,同时避免了硬编码所造成的...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    设计模式--抽象工厂

    "抽象工厂"是设计模式中的一种,属于创建型模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这个模式的核心在于隔离了产品对象的创建过程,使得系统对具体产品的依赖最小化,从而增强了系统的灵活性和...

    设计模式-抽象工厂模式javademo

    抽象工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定它们的具体类。在Java编程中,抽象工厂模式通常用于实现跨平台或者跨框架的接口,使得系统...

    李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    **抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    设计模式举例-抽象工厂模式(有图有真相)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的关键在于,它允许客户端代码在不关心具体实现的情况下,能够创建一系列相关的对象,同时保持了良好的封装...

    设计模式--抽象工厂之小解

    **设计模式——抽象工厂之小解** 在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,它们是经过验证的、可重用的解决方案。抽象工厂(Abstract Factory)设计模式是其中的一种创建型模式,它提供了...

Global site tag (gtag.js) - Google Analytics