java设计模式数据到对象
假设我在一个文件或数据库中有一些数据。它可以是JSON、XML、YAML、CSV、String[]等
我想用这些数据创建一个模型对象。例如:
数据:
{ "name": "John Doe", "age": "30" }
模型(伪代码):
class Person { Person(name, age) { this.name = name; this.age = age; } // business logic }
一些从JSON数据创建Person对象的代码(伪代码):
peopleArray = []; recordSet = aJSONReader.read('file'); for (recordSet as r) { peopleArray.add(new Person(r[0], r[1])); }
您将使用什么从给定数据构建模型对象?在我的示例中,我将开始支持JSON。如果我想更改它或支持新的数据格式,该怎么办? 如何将此代码解耦?哪种设计模式适合这里
# 1 楼答案
我喜欢这个技巧。创建一个抽象对象,其职责是提供属性。在这种情况下
name
和age
让Person类在构造函数中使用该对象
现在您可以有许多PersonInput的实现,每个实现都处理不同的数据格式(CSV、XML等)
JSON示例:
你是这样用的
# 2 楼答案
使用策略模式(参见here)。您希望提供不同的方法来解析数据。一个方法将解析JSON,另一个方法将解析XML,另一个方法将读取数据库。每种方法都可以看作是解析数据和生成数据对象的策略
创建一个公共接口,比如说
IDataObjectParser
,使用一个类似public List<DataObject> parse()
的方法。每个解析器都将实现这个接口。然后,您可以随时交换解析器,例如在运行时或根据配置文件# 3 楼答案
如果“data”指的是持久性机制,那么这是Data Access Objects(或DAO)的最佳情况
这通常与Java web应用程序和RDBMS实现相关联,但它在所有需要持久性的Java应用程序中都有应用程序
您只需要为您的个人定义一个DAO接口,比如
PersonDAO
,上面有两个方法getPerson()
和savePerson()
然后创建另一个类,比如说一个用于JSON实现的类,它实现了DAO,让我们调用我们的JsonPersonDAO
如果您使用工厂来生成Person对象,那么您只需要在需要时更改在单个位置使用的DAO实现。如果要从类内部生成Person对象,只需更改它使用的DAO实现
请在此进一步阅读:
http://www.oracle.com/technetwork/java/dataaccessobject-138824.html
http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/dao.html