AbstractFactory 抽象工厂模式

发布于 2022-10-15 10:12:30 字数 3144 浏览 21 评论 0

AbstractFactory 抽象工厂模式

今天估计没时间详细介绍AbstractFactory 抽象工厂模式,就先直接贴出一个示例代码,然后再慢慢介绍。

我google了一下其他介绍抽象工厂的文章,基本上都是用C#实现的,奇怪的现象,难道java都不怎么需要抽象工厂么?
为了跟别人的有所区别,我这里直接就用接口来实现抽象工厂了,毕竟接口也是一个抽象类么。我想尝试用不一样的角度来介绍抽象工厂。

以下先贴代码,还是沿用了机器人的例子,除了实现Speak打招呼功能,还额外实现了Clean打扫功能:
功能模块接口Speaker:

Java代码

  1. package com.iteye.bolide74.impl;
  2. public interface ISpeaker {
  3.         public void Speak(String msg);
  4. }

复制代码功能模块接口Cleaner:

Java代码

  1. package com.iteye.bolide74.impl;
  2. public interface ICleaner {
  3.         public void Clean();
  4. }

复制代码工作者(或许机器人或许是人类)的生成工厂接口:

Java代码

  1. package com.iteye.bolide74.impl;
  2. public interface IWorkerFactory {
  3.         public ICleaner getCleaner();
  4.         public ISpeaker getSpeaker();
  5. }

复制代码机器人A的生成工厂,实现或者说继承了“工作者”生成工厂类

Java代码

  1. package com.iteye.bolide74.action;
  2. import com.iteye.bolide74.impl.ICleaner;
  3. import com.iteye.bolide74.impl.ISpeaker;
  4. import com.iteye.bolide74.impl.IWorkerFactory;
  5. public class RobotAFactory implements IWorkerFactory {
  6.         @Override
  7.         public ICleaner getCleaner() {
  8.                 return new RobotCleaner();
  9.         }
  10.         @Override
  11.         public ISpeaker getSpeaker() {
  12.                 return new RobotSpeaker();
  13.         }
  14. }

复制代码实现类,或者说是应用代码:

Java代码

  1. package com.iteye.bolide74.tester;
  2. import com.iteye.bolide74.action.RobotAFactory;
  3. import com.iteye.bolide74.impl.ICleaner;
  4. import com.iteye.bolide74.impl.ISpeaker;
  5. import com.iteye.bolide74.impl.IWorkerFactory;
  6. public class Tester {
  7.         public static void main(String[] args) {
  8.                 IWorkerFactory workFactory=new RobotAFactory();
  9.                 ICleaner cleaner=workFactory.getCleaner();
  10.                 ISpeaker speaker=workFactory.getSpeaker();
  11.                 cleaner.Clean();
  12.                 speaker.Speak("hello,world!");
  13.         }
  14. }

复制代码以上,抽空再充实一下这篇博文,请下回再来,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文