定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
特点:
1、多个产品系列
工厂方法一般是一个产品系,抽象工厂是多个
2、抽象工厂接口
提供获取多个获取产品的方法(产品簇)
3、具体工厂
工厂方法:只生产一种产品;抽象工厂:生产一个产品族
产品簇:是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。对于每一个产品族,都有一个具体工厂。而每一个具体工厂创建属于同一个产品族,但是分属于不同等级结构的产品。
工厂方法与抽象工厂的区别和联系:
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
抽象工厂的类图结构:
JDK中的体现:
java.sql包
举例:
产品系:手机产品系;手机壳产品系
产品族:诺基亚(手机壳,手机),摩托罗拉(手机,手机壳)
结构图:
产品:手机
public interface Mobile {
public void call();
}
public class MotorolaMobile implements Mobile {
@Override
public void call() {
System.out.println("I am Motorola mobile");
}
}
public class NokiaMobile implements Mobile {
@Override
public void call() {
System.out.println("I am Nokia mobile");
}
}
产品:手机壳
public interface MobileCard {
public void mark();
}
public class MotorolaMobileCard implements MobileCard {
@Override
public void mark() {
System.out.println("I am a MotorolaMobileCard");
}
}
public class NokiaMobileCard implements MobileCard {
@Override
public void mark() {
System.out.println("I am a NokiaMobileCard");
}
}
抽象工厂:
public interface MobileFactory {
public Mobile createMobile();
public MobileCard createMobileCard();
}
具体工厂:
public class MotorolaFactory implements MobileFactory {
@Override
public Mobile createMobile() {
return new MotorolaMobile();
}
@Override
public MobileCard createMobileCard() {
return new MotorolaMobileCard();
}
}
public class NokiaFactory implements MobileFactory {
@Override
public Mobile createMobile() {
return new NokiaMobile();
}
@Override
public MobileCard createMobileCard() {
return new NokiaMobileCard();
}
}
Client客户端
/**
*
* @author xinchun.wang
* 工厂方法的优点在于:可以通过客户端指定具体工厂,实现实例创建的封装
* 静态工厂方法无法扩展,违背了 ’开闭原则‘
*/
public class Client {
public static void main(String[] args) {
MobileFactory mbf = new NokiaFactory();
Mobile mb = mbf.createMobile();
MobileCard mc = mbf.createMobileCard();
mb.call();
mc.mark();
System.out.println("----------------------------");
mbf = new MotorolaFactory();
mb = mbf.createMobile();
mc = mbf.createMobileCard();
mb.call();
mc.mark();
}
}
- 大小: 21 KB
- 大小: 16.7 KB
分享到:
相关推荐
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
Java 设计模式 - Abstract Factory Abstract Factory 是一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这个模式的主要优点是客户类和工厂类分开,客户类可以无需修改...
### 设计模式——Abstract Factory模式的认识 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决在软件设计过程中常见的问题。其中,Abstract Factory模式是23种GoF(Gang of Four)设计模式之一,它...
在设计模式中,Abstract Factory模式是一种用来解决在不指定具体实现的情况下创建一系列相关或相互依赖对象的模式。在本文的上下文中,我们看到它被应用于一个奇幻RPG游戏的角色种族设计,每个种族(如人类、精灵)...
创建型模式如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory),主要关注对象的创建过程,旨在减少类之间的耦合度。结构型模式如适配器模式(Adapter)、装饰器模式...
C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2) - 设计原则(1) C#设计模式(1) - ...
抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...
例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...
"Abstract Factory"模式是其中一种,它属于创建型设计模式,旨在提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在这个模式中,抽象工厂类定义了一组创建产品的方法,这些方法都是抽象的,由...
此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...
这类模式关注对象的创建过程,包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。它们提供了创建对象的不同策略,使代码更加灵活...
"设计模式-UML类图" 设计模式是软件开发中的一种解决方案,它提供了一种通用的解决方案来解决软件设计中常见的问题。UML(Unified Modeling Language)是一种标准化的建模语言,用于描述软件系统的结构和行为。下面...
在"设计模式 t03AbstractFactory"中,我们主要探讨的是如何利用抽象工厂模式来构建跨平台或不同环境下的对象。抽象工厂通常包含一个抽象工厂接口,该接口定义了一系列用于创建产品对象的方法。然后,为每个具体环境...
创建型模式主要关注对象的创建过程,比如单例模式(Singleton)、工厂模式(Factory)和抽象工厂模式(Abstract Factory)。它们提供了一种在不指定具体类的情况下创建对象的方法,增加了代码的灵活性和可扩展性。 ...
创建型模式关注对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory),它们旨在提供一种创建对象的最佳方式,同时保持系统的灵活性和扩展性。结构型模式涉及...