抽象工厂
定义:提供工厂方法之上级别的接口,主要用于返回一个或者多个工厂。
优点及使用:
- 创建相关的或者无关的对象组
- 提供产品化的类库,只暴露接口
- 实现类需要独立于超类
- 系统独立于它的产品创建,显示
- 试着强制某种约束
- 一种隐藏平台特点的选择
- 系统的易扩展
- 相关联的模式有:
工厂方法: 这常常是一个抽象的工厂实现
单例: 这常常是一个抽象的工厂实现
原型: 这常常是一个抽象的工厂实现
外观: 这经常被用于抽象工厂,提供创建实现类的接口
例子:
假设你需要写一段程序来显示不同地方的数据,比方说来自远程的或者本地的,你需要在取数据之前进行数据库连接,这样,你就有两种选择,本地或者远程,你可以选择使用抽象工程模式来设计接口。
class DataInfo{}
interface Local {
DataInfo[] loadDB(String fileName);
}
interface Remote extends Local{
void connect2WWW(String url);
}
class LocalMode implements Local{
public DateInfo[] loadDB(String name) {
System.out.print("Load from a local dataBase");
return null;
}
}
class RemoteMode implements Remote {
public void connect2WWW(String url) {
System.out.println("Connect to a remote site ");
}
public DataInfo[] loadDB(String name) {
System.out.println("Load from a remote database ");
return null;
}
}
// 抽象工厂
interface ConnectionFactory {
Local getLocalConnection();
Remote getRemoteConnection();
}
//抽象工厂实现
class DataManager implements ConnectionFactory {
boolean local = false;
DataInfo[] data;
//...
public Local getLocalConnection() {
return new LocalMode();
}
public Remote getRemoteConnection() {
return new RemoteMode();
}
public void loadData() {
if(local){
Local conn = getLocalConnection();
data = conn.loadDB("db.db");
}else {
Remote conn = getRemoteConnection();
conn.connect2WWW("www.some.where.com");
data = conn.loadDB("db.db");
}
}
// work on data
public void setConnection(boolean b) {
local = b;
}
}
//测试方法
class Test {
public static void main(String[] args) {
DataManager dm = new DataManager();
DataInfo[] di = null;
String dbFileName = "db.db";
if (args.length == 1) {
//将设local的为true
dm.setConnection(true);
LocalMode lm = (LocalMode)dm.getLocalConnection();
di = lm.loadDB(dbFileName);
} else {
//注意: dm.local = false 是默认设置
RemoteMode rm = (RemoteMode)dm.getRemoteConnection();
rm.connect2WWW("www.javacamp.org/db/");
di = rm.loadDB(dbFileName);
}
//使用一组方法来处理数据加载问题
//从这个层面来说你不需要担心数据的距离连接.
//例如di.find(), di.search() etc.
}
}
分享到:
相关推荐
抽象工厂模式是创建型设计模式中的一种,用于创建一系列相关或相互依赖的对象,而无需指定其具体类。抽象工厂模式强调产品的系列,对于有多个产品等级结构的系统非常有用。在抽象工厂模式中,一个工厂负责创建多个...
抽象工厂模式可以保证在任何环境下都能正确地创建对象,提高了代码的可移植性,但其缺点是增加新平台时,需要增加新的抽象工厂和一系列具体工厂,这可能会导致系统结构变得复杂。 对比这三种工厂模式: 1. **简单...
简单工厂模式是Java设计模式中创建型模式的一种,也被称为静态工厂方法模式。...但需要注意的是,在产品种类变得复杂或者需求频繁变动的情况下,可能需要考虑使用更灵活的设计模式,如工厂方法模式或者抽象工厂模式。
在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。
- **抽象工厂模式(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 ### 5. 工厂模式的优点 - 客户端无须知道产品类的实现细节,降低了耦合度。 - 新增产品时,无需...
抽象工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,这些对象属于同一族(或者属于某一特定上下文...
抽象工厂模式是软件设计模式中的一种创建型模式,它的主要思想是提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。在实际应用中,它常用于跨平台开发,或者当系统需要根据不同的条件创建...
抽象工厂模式通过提供一个创建一系列相关或相互依赖对象的接口,解决了创建一组风格一致的产品集的问题。这种模式不仅提高了代码的可扩展性和可维护性,还降低了客户端代码与具体产品实现之间的耦合度。在需要创建一...
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的关键在于,它允许客户端代码在不关心具体实现的情况下,能够创建一系列相关的对象,同时保持了良好的封装...
此外,还可以进一步研究简单工厂、工厂方法和抽象工厂这三种不同类型的工厂模式,了解它们之间的区别和适用场景。设计模式的学习对于提升软件设计能力至关重要,希望这个例子能帮助你在理解工厂模式的道路上更进一步...
设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,被广泛应用于各种编程语言中。...在实际编码过程中,结合其他设计模式,如单例模式、建造者模式等,可以构建出更高效、可扩展的系统架构。
抽象工厂模式是工厂方法模式的扩展,它不仅关注对象的创建,还关注对象之间的依赖关系。当一组相关或相互依赖的对象需要一起被创建时,抽象工厂模式尤为适用。它提供了一种创建一系列相关或相互依赖对象的接口,而...
- **抽象工厂模式的应用**:在系统设计中引入抽象工厂模式,可以有效地管理和创建各类服务组件(如数据访问组件),并支持不同环境下的部署。 #### 实例分析 以考试资料查询为例,系统可能需要从不同来源获取数据...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java中,抽象...
在某些情况下,可以考虑使用其他创建型模式,如工厂方法模式、抽象工厂模式或构建者模式,以适应更复杂的需求。例如,工厂方法模式允许子类决定具体的产品实例,而抽象工厂模式则处理一组相关的或相互依赖的对象的...
适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式是结构型模式中的典型代表。 ##### 适配器模式(Adapter) 适配器模式允许不兼容的接口之间进行协作,通过将一个类的接口转换为客户...
对于初学者来说,从简单工厂模式入手,逐步过渡到工厂方法模式和抽象工厂模式,能够逐步深入理解这一模式的精髓。通过实践和项目中的应用,可以进一步提升对设计模式的运用能力,从而在软件开发过程中编写出更加优雅...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在ASP(Active Server Pages)环境中,这种模式可以用来创建一系列相关的对象,比如在不同的数据库环境下创建相应...
工厂方法模式适用于单一产品线的创建,而抽象工厂模式则适用于多产品线的创建。在实际开发中,这两种模式可以帮助我们更好地解耦代码,提高系统的灵活性和可扩展性。在`javaFactory`这个压缩包文件中,可能包含了...