我们来分析上例:这个对象有3个成员变量,而其中一个是有transient关键字申明的,一个是序列化id,一个是普通变量,在main方法中,想创建了对象,并设置,然后写入到文件,再从文件读出来,最后输出读出来的对象的变量,普通变量是可以正常输出的(序列化id也可以,只是此处没有输出来而已),而transient申明的变量为0了,那就证明这个变量没有被保存到文件中,因为这个关键字声明的变量在序列化时会被忽略,而是后来创建时被自动初始化为0了(java中类的成员变量是基本数据类型时,如果没有初,就会被自动初始化为0)。
额...这里是介绍模式,好像说得多了点,那原型模式就介绍到这儿了。
6、责任链模式(Chain of Responsibility Pattern)
使很多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
何时使用
有许多对象可以处理用户请求,希望程序在运行期间自动确定处理用户的那个对象。 希望用户不必明确指定接收者的情况下,想多个接受者的一个提交请求 程序希望动态的指定可处理用户请求的对象集合
优点
低耦合 可以动态的添加删除处理者或重新指派处理者的职责 可以动态改变处理者之间的先后顺序
通常来说,一个纯粹的责任链是先传给第一个处理,如果处理过了,这个请求处理就此结束,如果没有处理,再传给下一个处理者。
比如我们有一个数学公式,有一个整数输入,要求小于0时返回绝对,其次,小于10的时候返回他的二次幂,否则,返回他本身:
首先我们要定义一个接口(处理者),来描述他们共有的行为:
//处理者public intece Handler { int handleRequest(int n); void setNextHandler(Handler next);}
然后是具体的处理者(3个):
//第一个具体处理者,处理小于0的public class Handler1 implements Handler { private Handler next; @Override public int handleRequest(int n) { if(n<0) return -n; else{ if(next==null) throw new NullPointerException("next 不能为空"); return next.handleRequest(n); } } @Override public void setNextHandler(Handler next) { this.next = next; }}//第二个具体处理者,处理>=0但小于10的public class Handler2 implements Handler { private Handler next; @Override public int handleRequest(int n) { if(n<10) return n*n; else{ if(next==null) throw new NullPointerException("next 不能为空"); return next.handleRequest(n); } } @Override public void setNextHandler(Handler next) { this.next = next; }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-12.html
好好读一读刘亚洲的文章就知道了