为了跟别人的有所区别,我这里直接就用接口来实现抽象工厂了,毕竟接口也是一个抽象类么。我想尝试用不一样的角度来介绍抽象工厂。
抽象工厂,怎么说呢,我觉得它是一个把代码工业化的模式,对于实现流水线式的功能的程序会更适合一点,但是灵活性不够,不适用于一些小程序。
以下沿用了机器人的例子。
首先要提出一个叫做“系列”的概念来区分跟“类型”区分。
什么叫系列呢? 就是指一个或者多个类型,它们的类型不同,但是他们拥有相同的属性和功能方法,典型的例子就是几种实现了相同的几个接口的类。那么它们就属于一个系列。
比如这里的机器人除了实现Speak打招呼功能,还额外实现了Clean打扫功能。如果Girlfriend也只会Speak和Clean,那么可以说Girlfriend和机器人是属于一个系列的。
但是,Girlfriend事实上还能做一些啪啪啪的事情
,所以这时候它们就不是一个系列的了。
用抽象工厂的好处,就是能很方便的管理同一系列的类别,如果其中一种类别出问题不能用了,可以很方便的就换成另外一种同系列类别,下面就用机器人类来举例:
机器人系列都拥有一下两种功能:Speak和Clean
功能模块接口Speaker:
package com.iteye.bolide74.impl;
public interface ISpeaker {
public void Speak(String msg);
}
功能模块接口Cleaner:
package com.iteye.bolide74.impl;
public interface ICleaner {
public void Clean();
}
工作者(或许机器人或许是人类)的生成工厂接口:
package com.iteye.bolide74.impl;
public interface IWorkerFactory {
public ICleaner getCleaner();
public ISpeaker getSpeaker();
}
机器人A的生成工厂,实现或者说继承了“工作者”生成工厂类
package com.iteye.bolide74.action;
import com.iteye.bolide74.impl.ICleaner;
import com.iteye.bolide74.impl.ISpeaker;
import com.iteye.bolide74.impl.IWorkerFactory;
public class RobotAFactory implements IWorkerFactory {
@Override
public ICleaner getCleaner() {
return new RobotCleaner();
}
@Override
public ISpeaker getSpeaker() {
return new RobotSpeaker();
}
}
实现类,或者说是应用代码:
package com.iteye.bolide74.tester;
import com.iteye.bolide74.action.RobotAFactory;
import com.iteye.bolide74.impl.ICleaner;
import com.iteye.bolide74.impl.ISpeaker;
import com.iteye.bolide74.impl.IWorkerFactory;
public class Tester {
public static void main(String[] args) {
IWorkerFactory workFactory=new RobotAFactory();
ICleaner cleaner=workFactory.getCleaner();
ISpeaker speaker=workFactory.getSpeaker();
cleaner.Clean();
speaker.Speak("hello,world!");
}
}
从上面这么多代码看起来,抽象工厂其实实现起来很麻烦,如果有一天机器人系列又多了一种跳舞功能,那么很多地方都要重写。
但是它的好处就在于,当RobotA这种类型的机器人停产的时候,你可以很方便的在应用代码里用同系列的new RobotBFactory()替换掉就可以了,其他的什么都不需要改。
所以我认为抽象工厂更加适合于那种功能模块已经非常成熟,基本上不需要太多修改,但是会随时替换掉实现这些功能模块的类的那种情况。
比如说数据库链接,所有的JDBC其实功能模块几乎一样,只不过种类不同,有些是SQL-Server,有些是MySQL,那么这时候用抽象工厂来写就比较方便了。
分享到:
相关推荐
抽象工厂(Abstract Factory)模式是设计模式中的一种创建型模式,它提供了一种...在阅读提供的博客文章《AbstractFactory 抽象工厂》和研究压缩包中的相关文件时,你可以深入学习到更多关于这个模式的实践和应用场景。
**抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...
Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂
1. **抽象工厂(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责创建...
1. **抽象工厂接口(Abstract Factory)**:定义一个创建对象的接口,但不指定具体的实现。在C#中,这通常表现为一个接口,如`IAbstractFactory`。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
设计模式抽象工厂模式(AbstractFactory)源代码
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不直接实现它,而是由子类来具体实现。这个接口通常包含了一系列创建产品对象的方法。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,提供具体...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
在实际编码中,`AbstractFactory`包下的文件可能包含`AbstractFactory.java`(抽象工厂接口)、`ConcreteFactory1.java`和`ConcreteFactory2.java`(具体工厂实现类)、`AbstractProductA.java`和`AbstractProductB....
抽象工厂模式(Abstract Factory)是一种创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这种模式的关键在于,它允许客户端代码与具体的实现细节解耦,使得添加新的产品...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...