`
chelsea
  • 浏览: 119418 次
  • 来自: ...
社区版块
存档分类
最新评论

Configuration Pattern : 配置模式

 
阅读更多

IoC? Dependency Injection? No, Configuration Pattern!


IoC 这个过于tricky的名字理所当然的引起困惑, Martin同学取了个自以为高明的"Dependency Injection", 实在是半斤八两, 五十步笑百步, 其实更大范围上, 它们都是"Configuration Pattern"的一种实现. (Configuration Pattern, 配置模式, 我起的名字, 自娱自乐, 如有雷同, 所见略同)

Engine + Configuration.

搜一下你的项目, 或者常用的开源项目, 如果能同时搜到"Engine"结尾的类和"Configuration"结尾的类, 那么这个项目很可能用到了"Configuration Pattern"

我用过的开源项目中, Apache Axis就使用了引擎+配置的模式

我做过的一个工作流项目中, 也使用了引擎+配置的模式


当然, 传统的读取配置和 Dependency Injection 还是不太一样的; 前者通常会有一些 getAbc( )之类的方法, 类似IoC中 getObject(objectId), getBean(beanId)之类的调用, 但Dependency Injection 更灵活的做法是通过Setter或Ctor直接注入, 你就不需要自己去调用 getter 方法了. 前者主要是配置一些简单属性,后者通常将配置扩展到对象

Algorithm + Functor

其实更大范围上, Engine + Configuration 的模式, 也是 Algorithm + Functor 模式的一种应用; 冒泡排序的算法是一样的, 结果只取决于你提供的比较函数; 你提供了比较年龄和比较姓名两个不同的Functor, 那么作用在冒泡排序这同一个Algorithm上, 就能得到两种结果.

参数化

其实最大范围上, 不就是参数吗? IoC, Dependency Injection, Configuration, Functor, 不就是"参数"这种思想的应用吗. (这就多余了, 没意思了)

分享到:
评论

相关推荐

    Kubernetes Patterns.pdf

    书中不仅有对基础模式的讲解,还包括了行为和结构化模式,甚至是高级和配置模式,涵盖了从基础知识到高级技巧的全方位内容。 书中首先介绍了Kubernetes的核心概念,比如什么是Kubernetes,以及设计模式在其中扮演的...

    Microrservices-design -pattern

    微服务设计模式中常见的模式包括服务发现模式(Service Discovery)、断路器模式(Circuit Breaker)、API网关模式(API Gateway)、分布式配置模式(Distributed Configuration)、和微服务部署模式等。这些模式各...

    SpringBoot配置详解

    * `server.tomcat.access-log-pattern`:访问日志模式。 * `server.tomcat.access-log-enabled`:是否启用访问日志,默认为false。 * `server.tomcat.internal-proxies`:内部代理服务器IP地址。 在本文中,我们...

    Pattern Recognition and Machine Learning

    4. 配置文件(Configuration Files):可能包含了参数设置,如超参数调优或实验配置。 5. 结果报告(Reports):可能包括分析报告、实验结果和结论,使用Markdown或HTML格式编写。 6. 图像文件(Images):可能...

    Eclipse宝典--读书笔记

    - **Auth**: 认证模式。 - **Type**: 数据源类型。 - **DriverClassName**: JDBC驱动类名。 - **URL**: 数据库连接URL。 - **Username**: 数据库用户名。 - **Password**: 数据库密码。 - **MaxActive**: ...

    vim-configuration:为文本编辑和编码构建便利的环境

    其灵活性和高度可配置性使得通过Vimscript定制个人工作环境变得可能。本文将深入探讨如何利用Vimscript配置Vim,以创建一个高效、便利的文本编辑和编码环境。 首先,理解Vimscript是配置Vim的基础。Vimscript是一种...

    10.NC900C菜单中英对照.pdf

    * Configuration(配置):调整投射机参数 二、子菜单 * Lamp Setup(灯泡设置):调整灯泡亮度 * Adjust(调整):调整灯泡模式 * Lamp Mode(灯泡模式):选择要使用的灯泡 * Lens Control(镜头控制):调整...

    opennms配置文件介绍

    为了使OpenNMS能够有效地执行这些任务,需要通过一系列配置文件对其进行设置。本文将详细介绍几个关键配置文件及其设置项。 #### 二、关键配置文件详解 ##### 1. `service-configuration.xml` 该文件位于`/opt/...

    logback日志配置

    - `<prudent>`:是否开启谨慎模式,在谨慎模式下,如果文件不存在,则不创建新文件,避免日志数据丢失。 4. **针对 Hibernate 的特殊配置**:虽然这部分示例代码未完全给出,但通常会涉及对 Hibernate 的 SQL 执行...

    SpringBoot集成SpringMVC例子.docx

    创建一个配置类,如`WebConfiguration`,并实现`WebMvcConfigurer`接口,如下所示: ```java @Configuration public class WebConfiguration implements WebMvcConfigurer { } ``` `WebMvcConfigurer`接口提供了...

    FLIR GUI Controller

    - **Operating Mode**(操作模式):选择相机的工作模式。 - **Save Settings**(保存设置):保存当前配置到文件。 - **Factory Defaults**(恢复出厂设置):重置为默认设置。 - **Reset Camera**(重启相机)...

    UML设计模式笔试题答案.doc

    ActionProxy 通过 Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的 Action 类 * vi. ActionProxy 创建一个 ActionInvocation 的实例,同时 ActionInvocation 通过代理模式调用 Action e) ...

    常用语音VoIP配置命令手册.pdf

    #### 五、计时器配置(Timers and Timing Configuration) 在VoIP配置中,合理设置计时器参数对于确保语音通信的质量和可靠性至关重要。主要包括以下几个方面: - **初始超时**:`timeouts initial` - **数字间...

    面向模式的软件体系结构 Vol.1

    - **Service Access and Configuration(服务访问与配置)**:关于如何访问和配置服务的模式。 - **Event Handling(事件处理)**:处理系统内部或外部事件的模式。 - **Synchronization and Concurrency(同步与...

    mt9d112初始化

    通过上述配置,MT9D112可以被初始化并设置成适合具体应用场景的工作模式。这些配置涵盖了从硬件复位到输出格式设置等多个方面,确保传感器能够高效稳定地运行。对于开发者而言,了解这些配置的具体含义及其背后的...

    [简单]log4jdbc-log4j2配置简记

    3. 配置log4j2:创建一个log4j2的配置文件(如log4j2.xml或log4j2.json),定义日志输出的模式和级别。例如,以下是一个简单的配置示例: ```xml <Configuration status="WARN"> <PatternLayout pattern="%d{...

    struts2基本配置

    Struts2作为MVC(Model-View-Controller)模式的一种实现,其核心职责在于处理用户请求,并将数据传递给视图层显示。相比于传统的Servlet实现,Struts2提供了更为简洁、灵活的方式来管理Web应用逻辑。 - **与...

    struts2.3.3运行配置

    6. **配置 web.xml 文件**:web.xml 定义了 Web 应用的基本配置信息,比如过滤器的设置。下面是一个示例: ```xml <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=...

Global site tag (gtag.js) - Google Analytics