网站首页 > java教程 正文
从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析。
1、工厂方法模式(Factory Method)
工厂方法模式分为三种:
11、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:
举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
[java] view plaincopy
publicinterface Sender {
publicvoid Send();
}
其次,创建实现类:
[java] view plaincopy
publicclass MailSender implements Sender {
@Override
publicvoid Send() {
System.out.println("this is mailsender!");
}
}
[java] view plaincopy
publicclass SmsSender implements Sender {
@Override
publicvoid Send() {
System.out.println("this is sms sender!");
}
}
最后,建工厂类:
[java] view plaincopy
publicclass SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
returnnew MailSender();
} elseif ("sms".equals(type)) {
returnnew SmsSender();
} else {
System.out.println("请输入正确的类型!");
returnnull;
}
}
}
我们来测试下:
publicclass FactoryTest {
publicstaticvoid main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produce("sms");
sender.Send();
}
}
输出:this is sms sender!
22、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:
将上面的代码做下修改,改动下SendFactory类就行,如下:
[java] view plaincopypublicclass SendFactory {
public Sender produceMail(){
returnnew MailSender();
}
public Sender produceSms(){
returnnew SmsSender();
}
}
测试类如下:
[java] view plaincopy
publicclass FactoryTest {
publicstaticvoid main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produceMail();
sender.Send();
}
}
输出:this is mailsender!
33、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
[java] view plaincopy
publicclass SendFactory {
publicstatic Sender produceMail(){
returnnew MailSender();
}
publicstatic Sender produceSms(){
returnnew SmsSender();
}
}
[java] view plaincopy
publicclass FactoryTest {
publicstaticvoid main(String[] args) {
Sender sender = SendFactory.produceMail();
sender.Send();
}
}
输出:this is mailsender!
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
猜你喜欢
- 2024-10-23 Java的简单工厂模式(java简单工厂模式实验总结)
- 2024-10-23 Java开发篇——设计模式(3)面试被问工厂模式?不要怕看这里
- 2024-10-23 架构师成长之路:Java设计模式之工厂模式
- 2024-10-23 Java的设计模式(十一):三种工厂模式区别,SpringBoot中的运用
- 2024-10-23 Java——工厂方法模式(java的工厂模式是什么意思啊)
- 2024-10-23 Java编程细节——设计模式之工厂模式
- 2024-10-23 Java之工厂方法(Factory Method)(java工厂模式的应用场景)
- 2024-10-23 Java工厂设计模式学习笔记(详细总结)
- 2024-10-23 教你轻松学Java开发23种设计模式 --工厂设计模式
- 2024-10-23 java设计模式-创建者模式-工厂模式
你 发表评论:
欢迎- 最近发表
-
- 多种负载均衡算法及其Java代码实现
- 输入www.baidu.com背后经历了啥?说清楚这个,已经超过90%的人了
- 优化MySQL:为什么你应该用 UNSIGNED INT 存储IP地址
- 实模式下CPU如何获取数据及指令(实模式寻址方式)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- 盘点爬虫语言为何选择Python而不是Java
- 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇
- 网络协议之TCP/IP协议(面试必考内容) - javaEE初阶 - 细节狂魔
- 深夜报警!10亿次请求暴击,如何用Redis找出最热IP?
- VPN技术(IPsec/L2TP/SSLVPN/PPTP)学习笔记
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)