从概念上讲,我的应用程序有一个接口和许多对象,它们以不同的方式实现接口。对象将由不同的工厂方法创建,随着我的应用程序的发展,将来会有更多的工厂。
例如
var Shapes={};
var Shapes.createCircle=function(radius) {
return {draw:function...}
};
var Shapes.createRectangle=function(width,height) {
return {draw:function...}
};我想在文件中序列化这些形状。我计划让每个对象存储其工厂的名称(例如“JSON”)和一个参数数组(例如,10,20),然后将这些部分保存为Shapes.createRectangle字符串。这样,反序列化的对象就可以恢复它们的所有函数和属性。
例如,为了保存一个对象,我计划存储JSON字符串
{"factory":"Shapes.createRectangle","args":[10,20]}然后在将来的会话中通过再次动态调用工厂方法来重建对象。
这种序列化多态对象的方法有什么问题吗?
发布于 2016-08-25 23:55:29
有可能。只有当这些对象是不可变的,或者您可以更改其状态的唯一方法是可逆地返回到工厂参数时,它才会起作用。
这往往会随着api的增长而变得棘手,但并非不可能。我会检查一个对象是否有serialize和deserialize方法,并调用它们,这样您就有了一个很好的模式,如果将来需要的话,如何定制序列化行为。
发布于 2017-04-25 09:38:01
一个缺点是,您将工厂函数名硬编码到数据中。当然,这只是一个问题,如果您稍后决定更改它们...也许只存储对象类型可以更好地应对此类问题。
https://stackoverflow.com/questions/39149640
复制相似问题