设计模式之抽象工厂模式(Abstract Factory)

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。

抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

下面以一个媒体工厂类为例子,同时用到了工厂方法模式和抽象工厂模式,希望在两者的对比之下,知道其中的差别。工厂方法模式针对媒体(音频和视频)的共有功能play和pause,分出MusicPlayer和VideoPlayer。抽象工厂模式则是衍生出Windows和Mac的媒体接口。

1、创建音频播放器和视频播放器的共同接口,并各自实现。

/**
 * 创建一个媒体接口,定义了播放和暂停两个方法
 */
public interface Media
{
   public void play();
   public void pause();
}
/**
 * 音频播放器
 */
public class MusicMedia implements Media
{
   @Override
   public void play()
   {
      System.out.println("MusicPlayer is playing...");   
   }

   @Override
   public void pause()
   {
      // TODO Auto-generated method stub  
   }
}
/**
 * 视频播放器
 */
public class VideoPlayer implements Media
{
   @Override
   public void play()
   {
      System.out.println("VideoPlayer is playing...");
   }

   @Override
   public void pause()
   {
      // TODO Auto-generated method stub
   }
}

 2、创建抽象工厂接口,提供Windows和Mac的媒体工厂接口。 

public interface MediaFactory
{
   public MusicMedia createMusicPlayer();

   public VideoPlayer createVideoPlayer();
}

/**
 * Windows下的媒体工厂类
 */
public class WinFactory implements MediaFactory
{
   @Override
   public MusicMedia createMusicPlayer()
   {
      System.out.print("Windows:");
      return new MusicMedia();
   }

   @Override
   public VideoPlayer createVideoPlayer()
   {
      return new VideoPlayer();
   }
}
/**
 * Mac下的媒体工厂类
 */
public class MacFactory implements MediaFactory
{
   @Override
   public MusicMedia createMusicPlayer()
   {
      System.out.print("Mac:");
      return new MusicMedia();
   }

   @Override
   public VideoPlayer createVideoPlayer()
   {
      return new VideoPlayer();
   }
}

每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。从上面的例子,工厂方法模式在一个工厂接口实现不同的方法,根据需要得到音频或视频的对象(工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类);抽象工厂模式通过不同的工厂接口实现了在不同平台上进行视频和音频的播放和暂停(抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类)。

参考:http://blog.csdn.net/zhengzhb/article/details/7359385

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值