实现一个空的接口,就能完成一件事情的设计模式是什么。比如Serializable接口。

zhengjunbo 发布于 2012/06/18 16:51
阅读 2K+
收藏 0
在java源代码中Serializable的源代码是以下
public interface Serializable {
}

而当我创建一个javabean

public class TestBean implements Serializable {
    //....fields
   //...methods
}

就可以实现这个类的可序列化功能。

请问,这是什么设计模式。

原理是什么

以下是问题补充:

@zhengjunbo:补充一下。这个模式我以前学过。但是太久忘记了。大概是继承了这个接口之后。。也有别的类对这个类实现了这个动作。当任何的类继承自这个类的时候,也同时会实现序列化功能。这是java层面的解耦问题。runable,readable等等都是这个模式做出来的。不然光实现一个接口,就能额外实现很多功能是不现实的 (2012/06/18 17:26)
加载中
0
vampirekiss
vampirekiss

因为它内部只认Serializable, 这是java自己定义的。你要想支持序列化就必须实现Serializable,

起个强制约束的作用。

zhengjunbo
zhengjunbo
如果我在程序里,也自定义一个功能,比如可以飞翔这个接口,而我在程序里实现这个接口的时候,这个类也能飞翔。而飞翔这个接口是空的。。。当然和序列化可能有区别。这是和runable一样有些人会这么回答我。所以我提问用了序列化这种没有任何方法的interface来提问
zhengjunbo
zhengjunbo
这就是我的问题所在,是什么让程序明白实现了这个接口就能序列化。是什么原因强制实现的?
0
开源中国首席攻城师
zhengjunbo
zhengjunbo
工厂模式解决的是依赖倒转的功能。而Spring的IOC解决的是工厂模式带来的代码入侵的问题。
0
郑雨涵
郑雨涵
实现一个空的接口往往用来判断一个类是否具有某种特点
郑雨涵
郑雨涵
回复 @zhengjunbo : instanceof
郑雨涵
郑雨涵
回复 @zhengjunbo : instnceof
zhengjunbo
zhengjunbo
如何判断呢?实现了一个空的接口,意思就是有这个功能,但是如何去实现它,比如在web开发中实现了Serializable 接口,就能传输对象,而没有实现就不能传输。这个过程是如何实现的。
0
vampirekiss
vampirekiss

没啥设计模式

仅仅只是标记出这个类是可被序列化的。

真要什么说法,也就是个“代码即文档”的意思

0
zhengjunbo
zhengjunbo

引用来自“vampirekiss”的答案

没啥设计模式

仅仅只是标记出这个类是可被序列化的。

真要什么说法,也就是个“代码即文档”的意思

为什么我自己写个

public interface SerializableTest {
}

这个接口就不能实现可序列化呢?



0
liuex
liuex

Serializable接口不是为了解耦,恰恰是使得程序和jvm耦合吧。。。

Serializable接口是一种与虚拟机的约定,实现了Serializable接口的类就像是告诉虚拟机“让我具有飞翔的能力”,然后jvm就给了你的类飞翔的能力。

我觉得Serializable和public/static/final/int/synchronized关键字没有区别,都是程序与jvm的约定,或者广义的说,“接口”

zhengjunbo
zhengjunbo
貌似是这样,就像只有实现Cloneable 才能克隆一样。本来想简化我遇到的问题的,结果貌似问题点不一样。我碰到的问题是struts2中有一个空的类型类Type。但是不知道是用来干嘛的。
0
尼莫
尼莫
我比较同意@liuex 的看法,可以把  serializable看成是java语言级别的或都说是jvm的系统接口
0
JoeyBlue
JoeyBlue

仅仅起到标记的作用哦,亲

比如你觉得例子中的TestBean

可以这样判断  

if(obj instanceof TestBean) {

    //做一些特殊的操作

}

zhengjunbo
zhengjunbo
你和我说的是不一样的东西
返回顶部
顶部