`

为什么要有抽象工厂以及什么是抽象类?

阅读更多
隔离抽象工厂这个名称或者称呼,抽象工厂实际上就是一个抽象类已而。而抽象类其实是一种介于接口和具体类的中间价态(化学上的名称~\(≧▽≦)/~啦啦啦),是一种纯抽象和纯实现这两极的中庸之道。


前提:子类中如果有共同的部分(如:方法DaoFactory getInstance(String classname)),那么我们就可以把它提取出来放在抽象类中,而不是每一个子类都要来写这个方法,提高了重复性,也便于扩展子类。而且它们还有相同的方法名称,但是实现不一样,可以定位抽象方法    abstract IuserDao getuserdao();  abstract IroleDao getroledao();看来我们构造一个抽象类非常的合情合理啊!
构建抽象类的线索:子类中有公共的实现部分,而且有抽象方法部分以供不同子类的实现,那么看来我们构造一个抽象类非常的合情合理啊!

我们的子类继承自抽象类而不直接实现接口,是因为接口是完全抽象的,我们的子类每实现一次都要完全覆盖接口中的方法;而抽象类可以有实现,那么我们的子类就不必重写那些公共的部分咯(如:方法DaoFactory getInstance(String classname)),而且扩展起子类也比较容易。


大纲图




UML图





package zen.factory;

/*来源:http://zhidao.baidu.com/question/63058512.html
 * 
 * 以开发项目的DAO层为例,在项目中客户的需求是常常变动的,
 * 临时更换数据库的需求也是常常发生的,
 * 那我们要如何解决跨数据库的功能,这里就要使用到抽象工厂模式了.
 * 工厂模式常常用于创建多系列化的对象(如Orale系列,MySql系列)
 * 
 * */

//角色表DAO接口   
interface IroleDao {
	void insert();

	void update();
}

// 用户表DAO接口
interface IuserDao {
	void find();

	void delete();
}

// 用户表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抽象工厂
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();
	}
}

class Config {
	static final String ORALCE = "zen.factory.OracleFactory";

	static final String MYSQL = "zen.factory.MysqlFactory";
}

public class DBFactory {
	public static void main(String[] args) {
		DaoFactory.getInstance(Config.ORALCE).getroledao().insert();
		DaoFactory.getInstance(Config.MYSQL).getroledao().insert();
	}
}


输出结果:

Oralce 对角色表插入数据
MySql 对角色表插入数据

分享到:
评论

相关推荐

    简单工厂-工厂方法-抽象工厂 对比总结

    抽象工厂提供了一组接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这个模式适用于当系统需要为不同的平台或环境创建一组相关对象时,比如在Windows系统和Linux系统中创建不同类型的GUI组件。...

    IOS 设计模式抽象工厂实例Demo

    抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这允许我们保持对象创建过程的灵活性,同时隐藏了具体的实现细节。在iOS开发中,这可能是为了创建不同平台...

    c++ 抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何设计一个灵活的、易于扩展的系统来创建这些产品的问题。在C++中,抽象工厂模式通过接口...

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

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

    抽象工厂模式代码

    在实际应用中,当我们需要创建一组具有共同特性的对象,而这些对象分别属于不同的类时,抽象工厂模式就显得尤为重要。 在Java或类似的面向对象编程语言中,抽象工厂通常包含以下几个关键角色: 1. **抽象工厂...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂模式就显得尤为重要。 首先,我们来看一下“抽象工厂模式+反射技术”。在Java或其他面向对象的语言中,反射是一...

    工厂方法模式和抽象工厂模式的区别

    在抽象工厂模式中,不只一个产品类被创建,而是有一组相关的产品类。这种模式适用于当系统需要创建一组相互依赖的对象,且这些对象都属于一个大的类别时。 回到之前的例子,如果我们的工厂不仅要生产衣物,还需要...

    C# Winform抽象工厂架构

    抽象工厂模式允许我们在运行时动态选择要创建的报表组件类型,而无需修改代码。这提高了代码的可维护性和可扩展性。 接着,我们讨论反射机制。C#中的反射允许程序在运行时检查自身的信息,并能动态创建和调用类型的...

    抽象工厂的介绍应用

    这种模式的关键在于"抽象工厂",它是一个接口或者抽象类,定义了创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。这种模式在实际开发中常用于框架构建、组件之间的解耦以及平台相关的对象创建等场景。...

    简单工厂模式-工厂方法模式-抽象工厂模式

    以上是对工厂模式的详细解释,包括简单工厂模式、工厂方法模式和抽象工厂模式的核心思想、优缺点以及适用场景。通过学习和理解这些模式,开发者可以在软件设计中更好地管理和创建对象,提高代码的可读性和可维护性。

    抽象工厂模式

    抽象工厂模式是设计模式中的一种,属于创建型模式,它为创建一组相关或相互依赖的对象提供了一个统一的接口,使得客户端无需关注这些对象的具体实现细节,仅需与这个接口交互即可。这种模式使得代码更加模块化,提高...

    抽象工厂模式Demo

    抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得客户端代码可以独立于具体的产品实现。在软件工程中,...

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

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

    抽象工厂模式实现

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

    C#抽象工厂模式

    在抽象工厂模式的应用中,可能会包含工厂类的配置信息,以便在运行时动态选择要使用的工厂实例。 `Program.cs`是C#程序的主入口点,它定义了应用程序的启动逻辑。在这个例子中,它可能包含初始化抽象工厂并调用其...

    抽象工厂AbstractFactory

    在提供的博客链接中,作者可能详细解释了如何使用Java实现抽象工厂模式,包括如何定义抽象工厂接口,创建具体工厂类以及如何通过工厂来实例化抽象产品类的各个具体实现。博客可能还讨论了该模式与其他设计模式(如...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂方法模式将具体的对象创建过程延迟到子类中,通过接口或抽象类定义创建对象的方法,每个子类对应一个具体的产品。这种方式使得系统更具有扩展性,增加了新的产品只需添加新的子类即可,无需修改原有代码。工厂...

    设计模式系列之抽象工厂模式

    在抽象工厂模式中,主要有四个角色: 1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,让子类决定实例化哪一个类。抽象工厂方法使代码独立于产品的具体类。 2. 具体工厂(Concrete Factory):实现了抽象...

Global site tag (gtag.js) - Google Analytics