java设计模式----简单工厂
2023-09-11 14:20:59 时间
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
以下是简单工厂UML模型:
那么简单工厂模式是在什么场景下使用呢。以下就以本人的理解举例说明:
就拿登录功能来说。假如应用系统须要支持多种登录方式如:手机认证、邮箱认证、username登录。那么自然的做法就是建立一个各种登录方式都适用的接口。
定义登录接口:
package com.simple.factory; /** * 登录接口 * */ public interface Login { public boolean login(String name, String password); }
手机号码登录:
package com.simple.factory; public class PhoneNumberLogin implements Login { @Override public boolean login(String name, String password) { // 登录处理逻辑 if (password.equals("123123")) { return true; } else { return false; } } }
邮箱登录:
package com.simple.factory; /** * 邮箱登录 * */ public class EmailLogin implements Login { @Override public boolean login(String name, String password) { // 登录处理逻辑 if (password.equals("123123")) { return true; } else { return false; } } }
username登录:
package com.simple.factory; public class UserNameLogin implements Login { @Override public boolean login(String name, String password) { // 登录处理逻辑 if (password.equals("123123")) { return true; } else { return false; } } }
静态工厂核心类:
package com.simple.factory; /** * 静态工厂核心类 * */ public class LoginManager { public static Login factory(String type) { if (type.equals("Email")) { return new EmailLogin(); } if (type.equals("PhoneNumber")) { return new PhoneNumberLogin(); } if (type.equals(type.equals("UserName"))) { return new UserNameLogin(); } return null; } }
測试client:
package com.simple.factory; /** * 測试client * */ public class Client { public static void main(String[] args) { String mLoginType = "PhoneNumber"; String name = "dashu"; String password = "123123"; Login login = LoginManager.factory(mLoginType); boolean bool = login.login(name, password); if (bool) { System.out.println("登录成功"); } else { System.out.println("登录失败"); } } }
简单工厂模式的长处
模式的核心是工厂类。这个类含有必要的逻辑推断。能够决定在什么时候创建哪一个登录验证类的实例,而调用者则能够免除直接创建对象的责任。简单工厂模式通过这样的做法实现了对责任的切割。当系统引入新的登录方式的时候无需改动调用者。
简单工厂模式的缺点
这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,全部的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。
相关文章
- 深入java面向对象五:Java的内存管理
- (十六)java中的String
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
- Java设计模式----观察者模式详解
- java设计模式6--适配器模式(Adapter )
- Java实现洛谷P1250 种树 (暴力)
- java实现黄金分割数
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 【java】基于Tomcat的WebSocket转帖 + 自己理解
- 在IntelliJ IDEA中创建和运行java/scala/spark程序
- java 23种设计模式及具体例子 收藏有时间慢慢看
- 【Java】java使用反射访问对象方法和成员变量
- Java超类-java.lang.object
- 当年的Java考试:JAVA&移动应用&大数据-大三-社区疫苗接种管理系统(全部源码·保姆式呵护)
- Java的二十三种设计模式(原型模式(Prototype))
- Java面试题 实现单例设计模式(懒汉、饿汉)
- java.time.LocalDate格式化 及 LocalDate转Date
- 【 华为OD机试 2023】信号发射和接收(C++ Java JavaScript Python)
- 001-java 设计模式概述
- java中23种设计模式
- Java开发篇——设计模式(5)装饰设计模式
- 【java】Java 内存模型
- JAVA设计模式——概述