当前位置: 首页 > wzjs >正文

中国亚马逊网站建设crm和erp的区别

中国亚马逊网站建设,crm和erp的区别,温州网站建设制作,零基础怎么自学动画制作工厂模式:解耦对象创建与使用的设计模式 一、模式核心:封装对象创建逻辑,客户端无需关心具体实现 在软件开发中,当创建对象的逻辑复杂或频繁变化时,直接在客户端代码中 new 对象会导致耦合度高、难以维护。例如&…

工厂模式:解耦对象创建与使用的设计模式

一、模式核心:封装对象创建逻辑,客户端无需关心具体实现

在软件开发中,当创建对象的逻辑复杂或频繁变化时,直接在客户端代码中 new 对象会导致耦合度高、难以维护。例如,创建不同类型的日志记录器(文件日志、数据库日志)时,客户端若直接依赖具体类,后续新增日志类型需修改所有调用处。

工厂模式(Factory Pattern) 通过引入一个工厂类,将对象的创建逻辑封装起来,客户端只需通过工厂类获取对象,无需知道对象的具体创建过程。核心解决:

  • 解耦创建与使用:客户端与具体产品类解耦,专注于业务逻辑。
  • 集中管理创建逻辑:对象创建规则统一在工厂类中维护,便于修改和扩展。
  • 符合开闭原则:新增产品类型时,只需扩展工厂类,无需修改现有客户端代码。

核心角色

  1. 抽象产品(Product):定义产品的公共接口(如日志记录器的log()方法)。
  2. 具体产品(Concrete Product):实现抽象产品接口,如FileLoggerDatabaseLogger
  3. 工厂类(Factory):负责创建具体产品实例,返回抽象产品类型。

核心思想与 UML 类图

PlantUML Diagram

二、核心实现:日志记录器工厂

1. 定义抽象产品接口

// 日志记录器接口  
public interface Logger {  void log(String message); // 记录日志  
}  

2. 实现具体产品类

文件日志记录器
public class FileLogger implements Logger {  @Override  public void log(String message) {  System.out.println("文件日志:" + message);  }  
}  
数据库日志记录器
public class DatabaseLogger implements Logger {  @Override  public void log(String message) {  System.out.println("数据库日志:" + message);  }  
}  

3. 实现工厂类

public class LoggerFactory {  // 根据类型创建日志记录器  public static Logger createLogger(String type) {  switch (type.toUpperCase()) {  case "FILE":  return new FileLogger();  case "DATABASE":  return new DatabaseLogger();  default:  throw new IllegalArgumentException("不支持的日志类型:" + type);  }  }  
}  

4. 客户端调用

public class ClientDemo {  public static void main(String[] args) {  // 通过工厂获取文件日志记录器  Logger fileLogger = LoggerFactory.createLogger("file");  fileLogger.log("系统启动");  // 通过工厂获取数据库日志记录器  Logger dbLogger = LoggerFactory.createLogger("database");  dbLogger.log("用户登录");  }  
}  

输出结果

文件日志:系统启动  
数据库日志:用户登录  

三、扩展:参数化配置实现动态工厂

为避免硬编码产品类型,可通过配置文件(如config.properties)动态指定产品类,提升灵活性。

1. 创建配置文件(src/config.properties)

logger.type=file  

2. 修改工厂类读取配置

import java.io.IOException;  
import java.util.Properties;  public class LoggerFactory {  private static final String CONFIG_FILE = "config.properties";  public static Logger createLogger() {  try {  // 读取配置文件  Properties prop = new Properties();  prop.load(LoggerFactory.class.getClassLoader().getResourceAsStream(CONFIG_FILE));  String type = prop.getProperty("logger.type");  // 根据配置创建产品  switch (type.toUpperCase()) {  case "FILE":  return new FileLogger();  case "DATABASE":  return new DatabaseLogger();  default:  throw new IllegalArgumentException("配置错误:未知日志类型");  }  } catch (IOException e) {  throw new RuntimeException("加载配置失败", e);  }  }  
}  

3. 客户端简化调用

public class ClientDemo {  public static void main(String[] args) {  Logger logger = LoggerFactory.createLogger(); // 自动根据配置创建  logger.log("动态加载的日志记录器");  }  
}  

四、工厂模式 vs 抽象工厂模式

对比维度工厂模式抽象工厂模式
处理对象单一产品类型(如 Logger)产品族(如 Logger + LogAnalyzer)
扩展性新增产品需修改工厂类新增产品族只需扩展新工厂
复杂度简单,适合小型场景复杂,适合多产品族的大型系统
典型场景单一类型对象创建(如日志、数据库连接)跨平台组件(如 Windows/Linux 界面组件)

五、适用场景

场景示例优势
对象创建逻辑复杂涉及参数校验、资源初始化的对象封装复杂逻辑,避免客户端臃肿
多类型产品切换不同环境下使用不同实现(如测试 / 生产环境)客户端无需修改,通过工厂动态切换
遵循迪米特法则减少客户端与具体类的直接依赖降低耦合度,提升可维护性

六、总结

工厂模式通过 “封装创建,暴露接口” 的设计,使客户端代码更简洁、可维护性更高。它是创建型模式的基础,在 Java 集合框架(如Calendar.getInstance())、Spring 框架(Bean 工厂)中广泛应用。

扩展思考

  • 工厂模式有哪些变种?(如静态工厂、工厂方法模式)
  • 如何结合反射机制进一步优化工厂类?
http://www.dtcms.com/wzjs/597183.html

相关文章:

  • 提供邵阳网站建设网上帮人做网站
  • 有些人做网站不用钱的,对吗?欧美在线网站设计教程
  • 如何做搞笑的视频视频网站网站建设的趋势
  • 广东网站建设方案临沂网站
  • 厦门 微网站制作免费网站安全
  • 创业网站模板天津网络推广公司
  • wordpress 免费模版西安seo培训
  • 网站怎么制作范例网站怎么做
  • 华为云怎么做网站网站搜索功能
  • 哪家网站设计公司好广告设计公司简介内容
  • 潍坊大型做网站建设的公司制作免费网站
  • 淘宝客的网站是怎么做的山东网优
  • 免费观看行情软件网站下载欧美品牌网站设计
  • 全屏网站模板做一个公司网站要多少钱
  • 婚纱网站开发进度表网站开发图片存哪里
  • 佛山狮山网站建设专业做互联网招聘的网站有哪些
  • 做网站免责声明成都建网页
  • 网站外链带nofollow是什么意思wordpress怎么实时刷新数据库
  • 学历提升专升本seo英文怎么读
  • 网站建设公司有哪些怎么做卡蜜网站
  • 深圳网站维护公司品牌网站建设有哪些方面
  • 多种五屏网站建设茂名仿站定制模板建站
  • 维护网站信息wordpress免费的好么
  • 医院电子网站建设景安怎么把网站做别名
  • 呼和浩特市城乡建设保障局网站梧州房地产信息网官网
  • 做网站设计哪家好视频号怎么付费推广
  • 用什么做网站简单中国建设银行泗水支行的网站
  • 对网站排名没有太大影响的因素门窗东莞网站建设技术支持
  • 惠州市建设局建工办网站临沂网站建设哪家最好
  • 一个网站怎么做后台销售推广语