java设计模式之抽象工厂模式学习
工厂模式有个问题就是,类的创建依赖工厂。要想增加一个工厂类,就要修改原来的代码,这违背了闭包原则。所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
1.工厂类接口
package com.qiao.abstractFactory;
public interface Sender {
public void send();
}
2.发短信
package com.qiao.abstractFactory;
public class SMSSender implements Sender{
public void send() {
System.out.println("sms sender ");
}
}
3.发邮件
package com.qiao.abstractFactory;
public class MailSender implements Sender{
public void send() {
System.out.println("mail sender ");
}
}
4.工厂类的提供者接口
package com.qiao.abstractFactory;
public interface Provider {
public Sender produce();
}
5.短信类的生产工厂
package com.qiao.abstractFactory;
public class SMSProduceer implements Provider{
public Sender produce() {
return new SMSSender();
}
}
6.邮件类的生产工厂
package com.qiao.abstractFactory;
public class MailProduceer implements Provider{
public Sender produce() {
return new MailSender();
}
}
7.调用方法 -- 发短信
@Test
public void test1(){
Sender send = new SMSProduceer().produce();
send.send();
}
输出 : sms sender
总结:抽象工厂的好处在于,有新的功能添加时,不需要去改原来的方法,只需要增加两个类即可。这个也就造成了他的缺点,当子类过多时,类的个数也会成倍增加。
java设计模式之抽象工厂模式学习的更多相关文章
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Java设计模式(3)——抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. 一.产品族和产品等级结构 为 ...
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
随机推荐
- spring里面的ioc的理解?
spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...
- 二叉树的遍历python 代码
__author__ = "WSX" class Node: def __init__(self, val = None, left = None, right = None): ...
- python之小记with open...as..上下文管理器
之前在学习file文件对象是说过,open文件操作结束后要关闭文件,否则会一直占用资源.但是当出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭 with o ...
- 我理解的Future模式
学而时习之,不亦说乎! --<论语> 什么是Future? 考虑一个场景,为了完成某个业务,我需要同时查询三张表的三条独立数据.但 ...
- android 捕获未try的异常
1.Thread.UncaughtExceptionHandler java里有很多异常如:空指针异常,越界异常,数值转换异常,除0异常,数据库异常等等.如果自己没有try / catch 那么线程就 ...
- SpringBoot读取静态资源文件
ClassPathResource resource = new ClassPathResource(publicKeyCer); File file = null; try { file = res ...
- docker && k8s
1.docker中网络模式中,有四个: host none bridge container 其中host模式相当于没用,省略了DNAT转换,直接运行在主机. docker network conne ...
- window下,nodejs 安装 http-server,开启命令行HTTP服务器
第一步:http://nodejs.cn/ 官网下载安装文件,安装nodejs: 第二步:运行中输入cmd进入命令行模式,输入 node -v ,显示版本号,代表安装成功: 第三步:在node命令 ...
- gson日期转换问题
转:http://blog.csdn.net/liao_leo/article/details/44593095 今天遇到个很奇怪的问题,gson解析日期字符串,本地执行可以,服务器上执行就报错. 这 ...
- selenium+Python(Js处理click失效)
有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是 click 事件失效了. 问题: 1.在练习百度的搜索设置按钮时,点保存设置按钮,al ...