Java-工厂设计模式
时间:2019-10-14
本文章向大家介绍Java-工厂设计模式,主要包括Java-工厂设计模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java工厂设计模式
一、关于工厂设计模式
介绍:设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,
并且是通过使用一个共同的接口来指向新创建的对象。
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
分类:普通简单工厂、多个方法的简单工厂、多个静态方法的简单工厂、工厂设计模式。
二、代码实现
简单工厂:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图
举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
Sender
package pers.hupo.hupow.factory; /** * @author hupo * 创建一个接口 * */ public interface Sender { void Send(); }
其次,创建实现类:
MailSender
package pers.hupo.hupow.factory; /** * @author hupo * Sender实现类 * */ public class MailSender implements Sender { @Override public void Send() { System.out.println("this mail message"); } }
SmsSender
package pers.hupo.hupow.factory; /** * @author hupo * Sender实现类 * */ public class SmsSender implements Sender { @Override public void Send() { System.out.println("this sms message"); } }
最后,建工厂类:
package pers.hupo.hupow.factory; /** * @author hupo * 工厂类 * */ public class SendFactory { public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } if ("sms".equals(type)) { return new SmsSender(); } return null; } }
测试方法
package pers.hupo.hupow.factory; public class FactoryTest { public static void main(String[] args) { SendFactory sendFactory = new SendFactory(); Sender sender = sendFactory.produce("sms"); sender.Send(); } }
输出结果:
原文地址:https://www.cnblogs.com/hupo-wey/p/11672418.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CentOS一键安装Resilio Sync脚本
- Python从URL获取图片、读取图片格式并保存到本地
- Linux一键屏蔽指定国家所有的IP访问
- React基础(9)-React中发送Ajax请求以及Mock数据
- 一个快速引入CDN的workflow
- 在Ryzen平台上安装macOS High Sierra苹果系统
- v-selectpage 基于Vue2的高清重制版
- Android Studio3.6中的View Binding初探及用法区别
- Android日志文件的读写工具类
- <Go语言学习笔记>【数组与切片】
- Android Studio 3.6 新特性一览(推荐)
- 03 Linux下的SVN服务器搭建
- Android openGl 绘制简单图形的实现示例
- 解决Android studio 3.6.1 出现Cause: unable to find valid certification path to requested target 报错的问题
- 使用kotlin实现MVP的方式(简单好用)