java - 解析进程 : keeping classes/instances separate or having them chained?

标签 java oop design-patterns

假设我有一个读取图像文件然后允许使用调整大小算法放大和缩小的进程。这可以分解为如下类:

ImageFileReader
ImageFileFormatIdentifier
ImageFileValidator
ImageFileHeaderParser
ImageZoomer
ImageResizer

组合这些类的最合适方法是什么?

它们是否应该“松散”以便程序员可以按照他认为适合他的代码的方式组合它们?

或者它们应该以这样一种方式设计,即一个对象具有对它所依赖的另一个类的引用或接口(interface)?

此外,在分层架构中,Service 层似乎第一种方法往往具有特权,方法用于组合。这是一种模式吗?

最佳答案

我建议阅读器和 validator 紧密耦合,因为当你阅读时,你想要确认内容是否有效。 (这在您的编辑之前应用!)

如果要任意使用缩放和调整大小,那么我建议您有一个总体 Controller ,图像通过修改参数传递给缩放/调整大小,并将结果传递回 Controller 。

这是 Facade 模式的使用,当多个服务(Reader/Identifier/Validator/etc)看起来是一个服务,通过协调其他组件。

此外,通过将控制反转视为一种模式,您可以在不同时间插入更多行为。例如,您定义图像加载器、 validator 和保存器的接口(interface),然后您可以在不同时间添加对其他图像类型的支持。

关于java - 解析进程 : keeping classes/instances separate or having them chained?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553927/

相关文章:

java hibernate 问题

java - Gradle + AspectJ找不到参数 “'的方法Aspectj()Aspectj'无法应用于 '(?, java.lang.String, ?, ?)'”

java - 在 java 中重构 Utility 类(静态类)的最佳方法是什么

c# - 字段 xxx 从未分配给,并且始终具有默认值 null

c++ - 将 this 传递给 this 的类变量的方法

java - mapreduce 作业未与 LocalJobRunner 一起运行

java - ListView 不从 OnClickListener 重绘

c++ - 如何等待在其他线程中创建窗口

design-patterns - 类数据职责

object - 扩展模块谓词的 Prolog 设计模式