设计模式总结篇系列:工厂方法模式(Factory Method)

简介:

工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建。一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建。

根据具体产生类对象的方法定义形式,又可以将其分为普通工厂方法模式、多个工厂方法模式和静态工厂方法模式。

一、普通工厂方法模式:

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

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

1 interface Sender{
2     
3     public void sender();
4     
5 }

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

复制代码
1 class MailSender implements Sender{
2 
3     @Override
4     public void send() {
5         System.out.println("发送邮件");
6     }
7     
8 }
复制代码
复制代码
1 class SmsSender implements Sender{
2 
3     @Override
4     public void send() {
5         System.out.println("发送短信");
6     }
7     
8 }
复制代码

3.定义工厂类:

复制代码
 1 class SenderFactory {
 2 
 3     public Sender produce(String type) {
 4         if (type.equals("mail")) {
 5             return new MailSender();
 6         } else if (type.equals("sms")) {
 7             return new SmsSender();
 8         } else {
 9             return null;
10         }
11     }
12 
13 }
复制代码

4.测试生成MailSender和SmsSender对象:

复制代码
 1 package com.qqyumidi;
 2 
 3 public class FactoryMethodTest {
 4 
 5     public static void main(String[] args) {
 6         SenderFactory factory = new SenderFactory();
 7         Sender mailSender = factory.produce("mail");
 8         Sender smsSender = factory.produce("sms");
 9     }
10 
11 }
复制代码

 

二、多个工厂方法模式:

将普通工厂模式中的工厂类中创建类的方法从依赖于参数判断改为直接针对每种对象各自定义一个生产方法。

具体代码如下:

复制代码
 1 class SenderFactory {
 2 
 3     public Sender produceMail(){
 4         return new MailSender();
 5     }
 6     
 7     public Sender produceSms(){
 8         return new SmsSender();
 9     }
10 
11 }
复制代码

 

三、静态工厂方法模式:

静态工厂方法模式与前面两种具体的方法定义不同在于方法被定义成静态的,这样可以不通过创建工厂实例就能直接获取到目标类的对象。

复制代码
 1 class SenderFactory {
 2 
 3     public static Sender produceMail(){
 4         return new MailSender();
 5     }
 6     
 7     public static Sender produceSms(){
 8         return new SmsSender();
 9     }
10 
11 }
复制代码

 

对于工厂方法模式,推荐使用第三种写法。

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!
分类: 设计模式

本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3744842.html,如需转载请自行联系原作者
目录
相关文章
|
10天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
19 0
|
29天前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
6天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
6天前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
24天前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
21 1
|
30天前
|
设计模式 Java Spring
设计模式之工厂方法
设计模式之工厂方法
设计模式之工厂方法
|
1月前
|
设计模式 编译器
解析器模式--设计模式
解析器模式--设计模式
17 0
|
3月前
|
设计模式 存储 算法
Java 设计模式最佳实践:三、行为模式
Java 设计模式最佳实践:三、行为模式
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——12中介模式
Golang设计模式——12中介模式
25 0
|
2月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。