设计模式学习笔记——抽象工厂模式

原文:http://blog.csdn.net/hackerain/article/details/7536226

定义:

为创建一组相关或相互依赖的对象提供一组接口,而且无需指定它们的具体类

抽象工厂模式是工厂模式的升级版本,因为它应对的是更加复杂的业务,即当有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

由于抽象工厂类较为复杂,我觉得使用一个具体的例子,更能形象的表达这个模式的思想,而且容易理解,这里画类图就不使用通用的类图了,模拟一个跨Windows和Linux平台的产品族的生产,这里模拟的是生产记事本和画图软件,跨两个平台,可以把这个类图看成一个坐标,横轴是产品族,纵轴是产品线,工厂类生产的是具体的产品线上的产品。


实现代码如下:

[java]  view plain copy
  1. public abstract class NotePadProduct {  
  2.     public void shareMethod(){  
  3.         System.out.println("windows share method");  
  4.     }  
  5.       
  6.     public abstract void doSomething();  
  7. }  
[java]  view plain copy
  1. public class NotePadWin extends NotePadProduct {  
  2.   
  3.     @Override  
  4.     public void doSomething() {  
  5.         System.out.println("windows notepad");  
  6.     }  
  7.   
  8. }  
[java]  view plain copy
  1. public class NotePadLinux extends NotePadProduct {  
  2.   
  3.     @Override  
  4.     public void doSomething() {  
  5.         System.out.println("linux notepad");  
  6.     }  
  7.   
  8. }  
[java]  view plain copy
  1. public abstract class DrawPictureProduct {  
  2.     public void shareMethod(){  
  3.         System.out.println("linux share method");  
  4.     }  
  5.       
  6.     public abstract void doSomething();  
  7. }  
[java]  view plain copy
  1. public class DrawPictureWin extends DrawPictureProduct {  
  2.   
  3.     @Override  
  4.     public void doSomething() {  
  5.         System.out.println("windows draw picture");  
  6.     }  
  7.   
  8. }  
[java]  view plain copy
  1. public class DrawPictureLinux extends DrawPictureProduct {  
  2.   
  3.     @Override  
  4.     public void doSomething() {  
  5.         System.out.println("linux draw picture");  
  6.     }  
  7.   
  8. }  
[java]  view plain copy
  1. public abstract class AbstractFactory {  
  2.     public abstract NotePadProduct createNotePad();  
  3.     public abstract DrawPictureProduct createDrawPicture();  
  4. }  
[java]  view plain copy
  1. public class WindowsFactory extends AbstractFactory {  
  2.       
  3.     @Override  
  4.     public DrawPictureProduct createDrawPicture() {  
  5.         return new DrawPictureWin();  
  6.     }  
  7.   
  8.     @Override  
  9.     public NotePadProduct createNotePad() {  
  10.         return new NotePadWin();  
  11.     }  
  12.   
  13. }  
[java]  view plain copy
  1. public class LinuxFactory extends AbstractFactory {  
  2.   
  3.     @Override  
  4.     public DrawPictureProduct createDrawPicture() {  
  5.         return new DrawPictureLinux();  
  6.     }  
  7.   
  8.     @Override  
  9.     public NotePadProduct createNotePad() {  
  10.         return new NotePadLinux();  
  11.     }  
  12.   
  13. }  

抽象工厂模式优点:

1、封装性,工厂类,只知道工厂类是谁,就能创造一个需要的对象,不需要关心具体的实现类。

抽象工厂模式的缺点:

最大缺点就是产品族的扩展非常困难。每增加一个产品,抽象工厂类要修改,其实现类也要修改,严重违反了开闭原则。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值