wangking717 写道
抽象工厂模式:
提供一个创建一系列相关活相互依赖对象的接口,而无需指定他们具体的类。
举2个例子:
1.BOSS要求提供JDBC,Hibernate,Ibatis等多套数据库操作解决方案,能够无成本地在这三个解决方案间切换。
2.系统的产品有多于一个的产品族,而系统只消费其中某一族的产品(Unix&Windows)
Button--->UnixButton/WinButton
Text----->UnixText/WinText
Unix产品族和Windows产品族,不会同时使用。
Factory--->UnixFactory/WinFactory
看类图吧:
BOOK产品:
public interface IBookDAO {
public void drop();
public void save();
public void copy();
}
public class MySQLBookDAO implements IBookDAO {
public void copy() {
System.out.println("copy book using the MySQL...");
}
public void drop() {
System.out.println("drop book using the MySQL...");
}
public void save() {
System.out.println("save book using the MySQL...");
}
}
public class SQLServerBookDAO implements IBookDAO {
public void copy() {
System.out.println("copy book using the sqlserver...");
}
public void drop() {
System.out.println("drop book using the sqlserver...");
}
public void save() {
System.out.println("save book using the sqlserver...");
}
}
USER产品:
public interface IUserDAO {
public void save();
public void delete();
public void get();
}
public class MySQLUserDAO implements IUserDAO {
public void delete() {
System.out.println("delete user using the MySQL...");
}
public void get() {
System.out.println("get user using the MySQL...");
}
public void save() {
System.out.println("save user using the MySQL...");
}
}
public class SQLServerUserDAO implements IUserDAO {
public void delete() {
System.out.println("delete user using the sqlserver...");
}
public void get() {
System.out.println("get user using the sqlserver...");
}
public void save() {
System.out.println("save user using the sqlserver...");
}
}
FACTORY:
public interface IFactory {
public IUserDAO getUserDAO();
public IBookDAO getBookDAO();
}
public class MySQLFactory implements IFactory {
public IBookDAO getBookDAO() {
return new MySQLBookDAO();
}
public IUserDAO getUserDAO() {
return new MySQLUserDAO();
}
}
public class SQLServerFactory implements IFactory {
public IBookDAO getBookDAO() {
return new SQLServerBookDAO();
}
public IUserDAO getUserDAO() {
return new SQLServerUserDAO();
}
}
TEST:
public class Test {
public static void main(String[] args) {
IFactory factory = new SQLServerFactory();
factory.getUserDAO().delete();
factory.getBookDAO().copy();
}
}
但是这里也有一个不好的地方,如果我在系统的各个地方都IFactory factory = new ...的话,假设new了100处,以后要换为MYSQLFactory的话,就得改100处地方。。所以可以抽象工厂+简单工厂来解耦。
抽象工厂的简单工厂类:
public class AbstractFactory {
private static final String DB = "mysql";
public static IFactory getDataAcessFactory(){
IFactory factory = null;
if("mysql".equals(DB)){
factory = new MySQLFactory();
}else if("sqlserver".equals(DB)){
factory = new SQLServerFactory();
}else{
throw new RuntimeException("No DB logic matched in the abstract factory.");
}
return factory;
}
}
客户端测试:
public class Test2 {
public static void main(String[] args) {
IFactory factory = AbstractFactory.getDataAcessFactory();
factory.getUserDAO().delete();
factory.getBookDAO().copy();
}
}
- 大小: 6 KB
分享到:
相关推荐
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
"Java抽象工厂设计模式的研究与实现" Java抽象工厂设计模式是一种创造型设计模式,属于factory pattern的升级版本。它提供了一种解决方案,以便在不指定具体实现类的情况下,创建复杂对象的家族。 Java抽象工厂...
**抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...
抽象工厂模式是设计模式中的一种结构型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在Java中,这种模式常用于当系统需要根据不同的平台或环境创建不同类型的对象时,例如这里的“北方市场”和“南方...
抽象工厂模式是面向对象设计模式中的一个创建型模式,它为创建一组相关或相互依赖的对象提供了一个接口,而无需指定它们的具体类。在C#中,这种模式的应用可以帮助我们实现跨平台、跨环境的代码,使得系统更具扩展性...
抽象工厂模式是面向对象设计模式中的创建型模式之一,它为创建一组相关或相互依赖的对象提供了一个统一的接口,使得客户端无需关注这些对象的具体实现细节。在C#中,抽象工厂模式的应用尤为广泛,尤其在多平台开发...
在Java中,抽象工厂模式(Abstract Factory Pattern)同样是一种创建型设计模式,它允许在不指定具体类的情况下创建一系列相关或相互依赖的对象。压缩包文件代码是一个简单的Java实现示例,展示了如何使用抽象工厂...
在众多设计模式中,抽象工厂(Abstract Factory)模式是一种创建型模式,它为创建一组相关或相互依赖的对象提供一个接口,而无需指定它们的具体类。这种模式允许客户端使用抽象接口与具体实现解耦,使得系统更易于...
抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式通常用于隔离客户端与具体实现之间的耦合,使得系统可以在不修改代码...
设计模式抽象工厂模式(AbstractFactory)源代码
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
总的来说,抽象工厂设计模式是一种强大的工具,它能够帮助我们构建更灵活、模块化的软件系统,同时隔离了对象创建的复杂性,使代码更加易于维护和扩展。在处理跨平台、多组件场景时,这种模式尤其有用。
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。这种模式让我们能够将产品族的创建过程延迟到子类中,使得子类可以在不修改原有代码的情况下增加新的产品。在...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...
此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...
.NET抽象工厂设计模式是软件开发中的一个核心设计模式,它属于创建型模式,主要用于创建对象族,而这些对象族在不同的上下文中具有不同的具体实现。在这个特定的项目中,抽象工厂模式被用来实现在不同数据库之间的...