一天一个设计模式(1)——工厂模式
工厂模式
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类。工厂模式是我们最常用的实例化对象的方式(除了new以外吧,大部分情况直接new就是了),工厂模式的存在,解决了接口(实际是类)选择的问题。
常用场景
以下是我自己在做项目中常见的使用场景。
-
数据库选择
开发过程中用到多个类型的数据库或同一类型的多个数据库连接。声明数据库通用的接口,将一类数据库的方法封装成一个子类,实现该接口。具体实例化的时候根据需要从配置文件或其他位置获取要实例化的类名,在运行时实例化相应的类。 -
日志记录
记录日志时不确定记录的方式(文件、数据库等) -
session存储方式
session采用文件方式或数据库方式存储 -
自定义表单
从几种表单中选择某项活动需要的表单,每种表单有不同的前台和后台验证方式
实例
/** * 创建一个接口 */ public interface DB { /** * 连接数据库 */ void connect(); } /** * 创建实现接口的类 */ public class Mysql implements DB { @Override public void connect() { System.out.println("mysql connected"); } } public class MsSql implements DB { @Override public void connect() { System.out.println("mssql connected"); } } public class Sqlite implements DB { @Override public void connect() { System.out.println("sqlite connected"); } } /** * 数据库工厂 */ public class DBFactory { public DB getDb(String shapeType) { if (shapeType == null) return null; if (shapeType.equalsIgnoreCase("mysql")) return new Mysql(); else if (shapeType.equalsIgnoreCase("mssql")) return new MsSql(); else if (shapeType.equalsIgnoreCase("sqlite")) return new Sqlite(); return null; } } /** * 执行 */ public static void main(String args[]){ DBFactory factory=new DBFactory();
String dbName=""; DB db=factory.getDb(dbName); db.connect();//只需要知道接口的方法即可调用 }
当需要新建一个数据库类型时,需要新增一个实现DB接口的类,同时在数据库工厂中增加实例化新类的方法,同时只需要修改配置文件中的数据库名称,而不必修改业务逻辑。
当然,实际应用中远没有这么简单。我们可能要给实现类添加不同的参数(比如连接字符串)以保证接口的方法能够正确执行。不过也无非是多定义几个接口的方法而已啦。
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/design1.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)