君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

2014年3月13日 #

摘要: 设计模式之状态模式这篇文章是关于状态模式的,它是一种行为设计模式。你不需要太多理论知识就能理解这个模式的主旨。这篇文章分成几个部分,我会列出状态模式适用于哪些情况,它的优缺点都是什么,还有一些使用的例子。有的时候当一个对象的内部状态发生改变的时候,你需要改变这个对象的行为。状态模式就是用来干这个的。你也可以创建不同的类来代表不同的状态和功能。当然这些类得继承一个抽象类或者实现一个接口。使用状态模式,我们可以通过在在运行时传递给对象不同的状态子类,来改变对象的状态。这是把双刃剑,好处是我们清晰的剥离出了不同的状态子类,坏处是类的数量开始膨胀。我们来看下这个例子。每年有四个季节,春夏秋冬。每个季节 阅读全文
posted @ 2014-03-13 02:04 刺猬的温驯 阅读(351) 评论(0) 推荐(0) 编辑

摘要: 设计模式:装饰者模式装饰者模式是不太常用的一种设计模式。我不太明白为什么它没能流行起来,虽然它用起来很方便。装饰者模式让你能够在可控的范围内往一个对象添加功能。这个在运行时也是靠谱的,甚至在静态类型的语言里也是如此。装饰者模式可以当作子类的一个替代品。子类化在编译期的时候添加新的特性,这个改动影响到原始类的所有实例;装饰者模式能在运行时给指定的对象提供新的行为。它是坚持开闭原则的一个很好的工具。下面的一些例子将让它看到这种模式的魅力:示例1:HTTP认证假设这里有个HTTP客户端 ,它访问的是一个RESTful的服务。服务有一部分是能直接访问的,有一些则需要用户进行登录。当客户端试图访问一个受 阅读全文
posted @ 2014-03-13 02:03 刺猬的温驯 阅读(308) 评论(0) 推荐(0) 编辑

摘要: 有的时候我们需要拦截方法的调用,来执行我们自己的逻辑。如果你不是Java EE CDI规范的拥趸,也不想使用类似aspectj的AOP框架,你还可以用别的简单有效的方式。JDK1.5引入了java.lang.reflect.Proxy,你可以通过它给一个指定的接口创建动态代理。程序每次调用动态代理类的时候,都会调用到代理类的InvocationHandler。因此在框架或者库的代码执行之前,你可以动态控制应该执行什么代码。另外一个JDK代理的实现是字节码框架,比如javassist或者cglib,它们都提供了类似的功能。你可以通过子类来决定你应该调用父类的哪个方法,或者你想要拦截哪个方法。这当 阅读全文
posted @ 2014-03-13 00:05 刺猬的温驯 阅读(428) 评论(0) 推荐(0) 编辑