摘要: 什么是不可变的对象呢?我们都知道String是不可变的,如果有涉及大量的字符串拼接我们最好不要用String,虽然我们在代码中可以这样写: 这样写是没有错的,这是不是和我们所说的String类型时不可变的违背了呢?其实不然,我们这里看到str“改变”了值,其实不是不是真正改变了,而是改变了str的引 阅读全文
posted @ 2016-10-21 00:38 OKevin 阅读(3540) 评论(0) 推荐(2) 编辑
摘要: 发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系。 什么是发布?简单来说就是提供一个对象的引用给作用域之外的代码。比如return一个对象,或者作为参数传递到其他类的方法中。 什么是逸出?如果一个类还没有构 阅读全文
posted @ 2016-10-19 00:38 OKevin 阅读(5847) 评论(4) 推荐(3) 编辑
摘要: 这是23种设计模式的最后一个——访问者模式,这个模式确实不怎么好理解,不怎么好用,而且实际中也很少用到这个设计模式。《大话设计模式》中就提到GoF四个人中有一个说过:“大多数时候你并不需要访问者模式,但当一旦你需要访问者模式时,那就是真的需要它了。”我们先来说说访问者模式运用到什么场景中,它适用于数 阅读全文
posted @ 2016-10-16 23:36 OKevin 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 解释器模式,简单来讲就是一个简版的编译器,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。解释器模式能对一些较频率执行的文法转换为一种特定的文法类型,不过解释器模式也有其不足,就是如果文法较为复杂的话,就得需要将每一个文法转换成至少一个类,如果包含 阅读全文
posted @ 2016-10-13 23:47 OKevin 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 享元模式核心掌握的一点就是——共享。如果一个程序代码中存在大量细粒度的对象,而这些大量的对象造成了很大的存储开销时就应该考虑使用。例如一个博客网站,每个人根据自己的账号登录自己的博客,此时每个“博客类”就应该成为共享,这也称为内部状态,但每个人博客里的数据又不同,这时用不同的账号区分也即是称为外部状 阅读全文
posted @ 2016-10-13 00:10 OKevin 阅读(389) 评论(0) 推荐(0) 编辑
摘要: 学了这么多的设计模式,离真正的实际运用还有很长的路要走,理论是理论,理论结合实践才有用。今天继续吧,继续一个学习一个新的设计模式——中介者模式。 中介在现实生活中非常常见,比如你要租一个房子,可能你不会和房东直接接触而是通过中介来完成一系列繁琐的过程。中介者模式就是这样的存在,如果一个类需要调用另一 阅读全文
posted @ 2016-10-12 00:34 OKevin 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 所谓职责链模式,其实在现实中非常常见,比如你要提出一个申请,首先可能通过你的组长,你的组长没有权力审批时会上报到经理,经理没有权力审批时上报到总监,总监没有没有权力审批时上报到总经理等等,以此类推直到有权力的管理者来审批。 这种场景我们可以用if-else判断分支来实现,不过记住大量的if-else 阅读全文
posted @ 2016-10-10 00:29 OKevin 阅读(603) 评论(0) 推荐(0) 编辑
摘要: 当学了这个命令模式后,又一次体会到编程的艺术,明明一个看似很简单的事,却要用“复杂”的方法来实现,就像在之前我多次说到的,其实并不是“复杂”,并不是“难”,而是自己基本功太弱,这些看似“复杂”的设计并不是故弄玄机卖弄,仔细学习过后才发现之精妙。比如今天要说的命令模式,书中举的例子非常典型。去路边摊买 阅读全文
posted @ 2016-10-09 00:20 OKevin 阅读(1532) 评论(2) 推荐(0) 编辑
摘要: 桥接模式要把握的很重要的一点就是:类的继承关系和类的组合/聚合关系,何时应该考虑使用何种关系。是不是在编程过程中一味地使用类的继承关系就代表这就是面向对象编程了?有时候并不是这样,Java的类继承设计成单继承模式我想应该就是不想把类的继承关系搞得过于复杂,实际上我们应该优先使用对象组合/聚合,而不是 阅读全文
posted @ 2016-10-07 23:32 OKevin 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator。我们首先来看Iterator中的源码。 通过JDK源码我们发现Iterator是一个接口,包含三个方法:hasNext、next、remove。 Iterator是一个接口,那如何来创建 阅读全文
posted @ 2016-09-30 00:45 OKevin 阅读(1079) 评论(0) 推荐(0) 编辑