学习抽象工厂模式首先要了解什么是产品族和产品等级这两个概念,所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族,抽象工厂模式所提供的一系列产品就组成一个产品族,而产品等级的概念,其实就是一个具体产品,简单的来区分产品族和产品等级,就是产品族是抽象的,而产品等级是具体的。
举个很简单的例子,苹果iPhone手机和三星Galaxy手机,是同一个产品等级,它们都是手机,是具体的产品;而苹果公司除了生产iPhone以外,还有iPad平板电脑,这样,iPhone和iPad就组成了一个产品族,都是一个苹果公司这个工厂来生产,而三星也生产平板电脑Galaxy Note,这样Galaxy和Galaxy Note组成一个产品族,都是由三星这个工厂生产。
实现源码如下:
package org.lee.study.abstractfactory;
public interface Factory {
public Mobile genMobile();
public Pad genPad();
public Notebook genNotebook();
}
package org.lee.study.abstractfactory;
public class IphoneFactory implements Factory {
public Mobile genMobile() {
return new Iphone();
}
public Pad genPad() {
return new Ipad();
}
public Notebook genNotebook() {
return new MacBook();
}
}
package org.lee.study.abstractfactory;
public class SunsungFactory implements Factory {
@Override
public Mobile genMobile() {
return new Galaxy();
}
@Override
public Pad genPad() {
return new GalaxyNote();
}
@Override
public Notebook genNotebook() {
return new SunsungNoteBook();
}
}
package org.lee.study.abstractfactory;
public interface Mobile {
/**
* 手机呼叫功能
*/
public void call();
}
package org.lee.study.abstractfactory;
public interface Pad {
/**
* 平板电脑的触摸屏功能
*/
public void touch();
}
package org.lee.study.abstractfactory;
public interface Notebook {
/**
* 利用笔记本工作
*/
public void work();
}
package org.lee.study.abstractfactory;
public class Galaxy implements Mobile {
@Override
public void call() {
System.out.println("我用三星Galaxy系列的手机给你打电话!");
}
}
package org.lee.study.abstractfactory;
public class GalaxyNote implements Pad {
@Override
public void touch() {
System.out.println("三星Galaxy Note平板电脑。");
}
}
package org.lee.study.abstractfactory;
public class SunsungNoteBook implements Notebook {
@Override
public void work() {
System.out.println("用三星笔记本办公!");
}
}
package org.lee.study.abstractfactory;
public class Ipad implements Pad {
@Override
public void touch() {
System.out.println("HOHO~~~,我有Ipad Air了。");
}
}
package org.lee.study.abstractfactory;
public class Iphone implements Mobile {
@Override
public void call() {
System.out.println("我用iPhone给你打电话!");
}
}
package org.lee.study.abstractfactory;
public class MacBook implements Notebook {
@Override
public void work() {
System.out.println("用苹果笔记本办公!");
}
}
package org.lee.study.abstractfactory;
public class Client {
public static void main(String[] args) {
Factory factory = new IphoneFactory();
/* 苹果产品族 */
Iphone iphone = (Iphone) factory.genMobile();
iphone.call();
MacBook mac = (MacBook) factory.genNotebook();
mac.work();
Ipad ipad = (Ipad) factory.genPad();
ipad.touch();
factory = new SunsungFactory();
/* 三星产品族 */
Galaxy galaxy = (Galaxy) factory.genMobile();
galaxy.call();
SunsungNoteBook sun = (SunsungNoteBook) factory.genNotebook();
sun.work();
GalaxyNote note = (GalaxyNote) factory.genPad();
note.touch();
}
}
抽象工厂模式的学习,关键还是要理解产品族与产品等级的关系,不然的话很容易与工厂方法弄混淆。当然这只是我个人的见解,每个人的学习方法、理解方式不一样,所以学习起来理解的程序也不一致。
相关推荐
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式通常用于隔离客户端与具体实现之间的耦合,使得系统可以在不修改代码...
抽象工厂模式是软件设计模式中的一种,属于创建型模式,它的主要目的是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在实际应用中,当我们需要创建一组具有共同特性的对象,而这些对象分别...
抽象工厂模式可以帮助我们创建一个工厂接口,该接口声明了创建这些组件的方法,然后为每种操作系统实现一个具体的工厂类。 ```java // 抽象工厂接口 public interface GUIFactory { Button createButton(); ...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...
设计模式抽象工厂模式(AbstractFactory)源代码
设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...
### 抽象工厂模式简介与应用实例 #### 一、抽象工厂模式定义 抽象工厂模式是一种创建型设计模式,它能够让我们从一个公共接口中创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的核心在于提供了...
在软件工程中,抽象工厂模式经常用于框架和库的开发,它可以用来封装一系列相关或相互依赖的对象的创建,使得客户端代码可以在不关心具体实现的情况下使用这些对象。这样,当需要更换不同的产品族时,只需要替换对应...
抽象工厂模式是一种面向对象的设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在C#中,这种模式经常用于软件工程中的框架设计,允许系统独立于具体产品的实现进行扩展和修改。...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Java中,我们可以通过实现接口或者继承抽象类来实现这一模式。这个压缩包中的内容很可能...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,它表示一系列相关或相互依赖的对象。在不指定具体类的情况下,抽象工厂模式使得...