免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1618 | 回复: 0
打印 上一主题 下一主题

AbstractFactory 抽象工厂模式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-13 17:48 |只看该作者 |倒序浏览
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. }
复制代码
以上,抽空再充实一下这篇博文,请下回再来,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP