博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式总结篇系列:抽象工厂模式(Abstract Factory)
阅读量:5918 次
发布时间:2019-06-19

本文共 1104 字,大约阅读时间需要 3 分钟。

在上一篇的工厂方法模式中,通过一个公用的类对其他具有相同特性(实现相同接口或继承同一父类)的类的对象进行创建。随之带来的问题在于:当新定义了一个具有相同特性的类时,需要修改工厂类。这与设计模式中的开闭原则有些违背。因此,通过抽象工厂模式:创建多个工厂类而不是一个工厂类,一旦需要创建新的类对象,只需增加新的工厂类就可以了,不需要修改之前的代码。如此可以较好解决工厂方法模式中的问题。

常见经典写法如下(以发送邮件和短信为例):

1. 定义邮件类和短信类具有的共同接口:

与工厂方法模式中定义相同。

2.定义邮件类和短信类:

与工厂方法模式中定义相同。

3.定义不同工厂类所具有的共同接口(既然在需要的时候可以直接创建新的工厂类,那么这些工厂类应该是具有相同的接口的):

1 interface Provider {2 3     public Sender produce();4 }

4.定义创建发送邮件工厂类和发送短信工厂类:

复制代码
1 class MailFactory implements Provider {2 3     @Override4     public Sender produce() {5         return new MailSender();6     }7 8 }
复制代码
复制代码
1 class SmsFactory implements Provider {2 3     @Override4     public Sender produce() {5         return new SmsSender();6     }7 8 }
复制代码

5.测试:

复制代码
1 public class Client {2 3     public static void main(String[] args) {4         Provider provider = new MailFactory();5         Sender sender = provider.produce();6         sender.send();7     }8 9 }
复制代码

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!
分类:
本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3746483.html,如需转载请自行联系原作者
你可能感兴趣的文章
RPC (远程过程调用)
查看>>
序列类型之元组14
查看>>
使用cocos3.0创建项目总结
查看>>
我的友情链接
查看>>
MySQL基础(2)
查看>>
fedora16 准备工作更新中。
查看>>
Spark算子:RDD键值转换操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey
查看>>
我的友情链接
查看>>
微信获取access_token
查看>>
[置顶] 兼容解决 IE 、火狐、谷歌浏览器中 Iframe框架的页面缓存的方法...
查看>>
NSArray NSMutableArray的简单使用
查看>>
使用CSS如何实现文字竖排
查看>>
总结js创建object的方式(对象)
查看>>
数据中各个层之间的关系及其实力
查看>>
hibernate load get方法区别
查看>>
iOS平台内存常见问题(转)
查看>>
用js实现的动画效果
查看>>
本人小白,Java学习网站汇总【备忘】
查看>>
Javascript 事件的捕获,冒泡和目标阶段的回调函数执行顺序
查看>>
MySQL删除binlog日志及日志恢复数据
查看>>