- 浏览: 2467245 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
这是一本差不多以漫画的形式, 以java语言来讲解设计模式, 很多原来不是很清楚的地方在这本书里面豁然开朗.算是对设计模式的一个复习和加深, 这本书很多讲解设计模式都是采用如何由一般的编码实现完成到设计模式的演变.也可以说是重构的一种最佳实践.而且还让人识别在某种情况下需要实现何种设计模式
设计原则
找出应用中可能需要变化之处, 把它们独立出来, 并加以封装, 不要和那些不需要变化的代码混在一起
设计模式就是将一些隐含的oo开发经验进行总结归纳的结果
设计是一门艺术, 总是有许多可取舍的地方.但是如果你能采用这些经过深思熟虑, 且经受过时间考验的设计模式, 你就领先别人了.
有一些面向对象原则, 适用于所有的模式. 当你无法找到适当的模式解决问题时, 采用这些原则可以帮助你.
对于一个设计者来说,真正需要关心的是建立弹性的设计,可以维护, 可以应付变化
观察者模式
如果你了解报纸出版是怎么回事, 你就了解观察者是怎么回事儿了, 只是换了一个名字而已, 出版者改成了"主题(Subject)", 订阅者改成了"观察者(Observer)"而已
工厂模式
当看到new的时候, 就会想到具体化, 想到跟具体实现绑定, 想到这可能不是一种很好的设计, 可能违背"针对接口编程, 而不是具体实现"
new本身没有错, 只是当遇到需要变化的时候, 就会出现设计不佳的问题
将new实例的部分从代码中抽取出来, 并封装成一个类, 这个类就实现了简单工厂方法, 如果这个工厂创建实例的方式是静态的, 就成了静态工厂方法, 使用静态工厂方法有一个弊端就是没法通过继承来改变创建实例方法的行为
将创建实例的代码封装在一个方法中, 如果这个创建过程的实现可能会有多种, 那么将该方法声明为抽象方法, 然后由子类承担创建的任务, 这种做法就是抽象工厂的做法, 比如这样声明:
abstract Product factoryMethod(String type);
工厂方法模式涉及到两种角色:创建者, 就是那个提供抽象工厂方法的类, 另一个就是产品类, 就是创建的具体东西, 一般是一个接口.
工厂方法的核心就是在抽象类中提供工厂方法的定义, 具体的创建过程到子类中实现.
工厂方法是一种比较好的实现依赖倒置原则的方式.
依赖倒置原则(要依赖抽象, 而不是具体类)和"针对接口编程, 而不是实现"的区别在于, 前者更强调对抽象的依赖
避免违反依赖倒置原则的做法:
1.变量不能持有具体类的引用.如果实用new, 就会持有具体类的引用. 可以采用工厂方法来避开这种做法
2.不要让类派生自具体类, 如果派生自具体类, 就会依赖具体类, 而应该派生自一个抽象(接口和抽象类)
3.不要覆盖基类中已实现的方法. 如果覆盖基类中已实现的方法, 那么呃逆的基类就不是一个真正适合被继承的抽象.基类中实现的方法, 应该由子类共享.
抽象工厂模式实际上可以看着一组工厂方法的合集, 因为他是为了创建一组相关或依赖的对象家族.
单例模式
单例模式的一般做法:一个私有构造器, 一个静态方法和一个指向实例化对象的静态变量, 但是返回单例有两种处理方式, 一种是贪婪初始化, 就是在静态初始化的时候创建单例, 这样做的好处就是可以保证线程安全, 但是这种方式主要针对初始化不是很耗资源的情况.另一种延迟初始化, 直到在返回单例前先判断是否初始化, 没有则初始化, 有则返回已经初始化对象. 但是这种做法的一个弊端就是在多线程的情况下容易出现并发的问题, 其解决办法有两种, 一种是将静态方法加synchronized关键字, 但是这种做法的执行效率会下降很多.另一种做法就是:
private volatile static Singleton uniqueInstance; private Singleton(){} public static Singleton getInstance(){ if (uniqueInstance == null){ synchronized(Singleton.class){ if (uniqueInstance == null){ uniqueInstance = new Singleton(); } } } }
如果单例类采用多个不同的类加载器加载的话, 会出现同事存在多个单例的怪现象. 所以如果程序实用了多个类加载器同时又实用了单例模式, 需要执行制定同一个类加载器来加载单例类
命令模式
命令模式可以将命令的执行者与命令的请求者解耦.
门面模式
门面模式中涉及到一个"最少知识原则", 即之和你的密友谈话. 这个原则希望不要让太多的类耦合在一起, 免得修改系统中一部分, 会影响到其他部门分, 如果许多类之间相互依赖, 那么这个系统就会变成一个不稳定的系统, 需要花更多的维护成本.
像这样的代码:
return station.getThermometer().getTemperature();
应该改成:
station.getTemperature();
要避免这种情况的的做法:
对于任何对象而言, 在该对象的方法类, 我们只应该调用属于以下范围的方法:
该对象本身;
呗当作方法的参数传递进来的对象;
此方法所创建或实例化的任何对象;
对象的任何组件
这个原则的一个缺点, 是会造成更多的包装类被提供出来, 对性能会有一定的影响.
模板方法
定义了一个算法的步骤, 并允许子类为一个或多个步骤提供具体的实现
状态模式
在处理状态的改变的时候, 我们一般的做法就是给每个状态定义一个常量, 然后在不同的操作的时候, 对当前的状态值进行修改.这样做的一个不好的地方在于, 如果我们增加了一种新的状态的话, 修改起来会非常的麻烦, 这种情况下, 不变的是行为(如果行为也是可变的, 状态模式就不是很合适了), 而变化的是状态值, 所以这里我们就应该应用"将变化的部分加以封装"的原则, 将稳定的行为用接口的方式加以固定, 每一种状态用一个类进行封装. 采用状态模式之后:
1.将每个状态的行为局部化到他自己的类中
2.将容易产生问题的if语句删除, 以方便日后的维护.
3.让每一个状态"对修改关闭", 让糖果机"对扩展开放", 因为可以加入新的状态类.
代理模式
为另一个对象提供一个替身或占位符以控制对这个对象的访问
代理模式有很多变体, 而这些变体几乎都和"控制访问"的做法有关.比如远程代理控制访问远程对象, 虚拟代理控制访问创建开销比较大的资源.保护代理基于权限控制对资源的访问.
代理模式和装饰模式比较类似, 二者的区别是, 前者是控制对象的访问, 后者是为对象增加行为
代理和适配器的区别, 前者是实现相同的接口, 后者是改变对象适配的接口
发表评论
-
<异类>读书笔记
2013-03-06 07:54 0成功者能够获得更多的机会,从而能变得更为成功。税收愈减免,富人 ... -
《python学习手册》学习笔记
2013-03-11 22:25 3465python格式化传参数非常赞,用数字标明位置,值得java学 ... -
<万历十五年>读书笔记
2013-03-11 22:27 1583在网上下了一个电子书, 但是貌似跟万历十五年没啥关系, 都是讨 ... -
《鸟哥的linux私房菜》读书笔记(部分)
2013-03-11 22:27 2062x86是一种微机系统硬件架构,另一种是苹果的mac的架构 l ... -
《你的灯亮了吗》读书笔记
2013-03-06 07:20 1503这是一本原本写给程序员的书 本书的四个问题: 搞清问题的来源 ... -
《小狗钱钱》读书笔记
2013-03-06 07:17 1476一本非常不错的理财学习入门书, 以童话的形式, 儿童的思维方式 ... -
《我的奋斗》读书笔记
2012-04-14 22:03 2053文字写的很幽默, 故事也基本都是一些平常人的故事,看到了一个特 ... -
《Java Performance》书评
2012-01-15 18:32 2960原文: http://java.dzone.com/rev ... -
《程序员应该知道的97件事》读书笔记
2012-01-15 18:36 2382一本关于写代码的文 ... -
《影响力》读书笔记
2011-11-05 14:47 1833从书名上很可能以为 ... -
《浪潮之巅》读书笔记
2011-11-05 14:44 1371作为一个中国人通过分析硅谷高科技公司的一系列传奇, 总结出这 ... -
《黑客与画家》读书笔记
2011-11-05 13:37 1817以前看过《rework》, 觉得是每一个小型创业公司的创业宝 ... -
《乔布斯传》读书笔记
2011-10-18 08:53 2845在ipad上看完了这本书, 写的还不错, 里面没有无聊的八 ... -
《细说Java》读书笔记
2011-10-05 15:01 1992国人写的, 感觉是一 ... -
《敏捷估计与规划》读书笔记
2011-10-05 12:08 3177这本书断断续续看了很长时间, 内容非常不错, 基本涵盖了sc ... -
《怪诞心理学》读书笔记
2011-10-05 09:44 1822既然是怪诞, 那么整本书涉及的内容并不是我们平常司空见怪的一 ... -
《番茄工作法图解》读书笔记
2011-09-28 09:02 2390番茄工作法是时间管 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2098"工欲善其事必先利其器", 在平时的开发 ... -
《敏捷迭代开发管理者指南》读书笔记
2011-09-24 13:09 2215这是一本关于迭代开发 ... -
《解析极限编程》读书笔记
2011-09-24 13:03 1784不知道是kent beck的语 ...
相关推荐
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...
在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
本项目为《Head First 设计模式》的Java语言学习笔记与实战练习源码集合,包含104个文件,主要包括88个Java源文件、12个Markdown文档、3个XML配置文件及少量其他辅助文件。内容涵盖设计模式的学习笔记以及相应的代码...
### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...
《Head First 设计模式》是软件开发领域内一本广受欢迎的书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra四位作者共同撰写。这本书以其独特的视觉风格和易于理解的教学方法,深入浅出地介绍了...
读书笔记:设计模式学习笔记和代码。《图解设计模式》《Head First 设计模式》
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
《HeadFirst设计模式笔记》是深入理解软件设计思想的一份宝贵资料,主要涵盖了设计模式的基础理论和实际应用。设计模式是软件开发中的经验总结,它为解决常见的编程问题提供了标准的解决方案,使得代码更具可读性、...
以上只是《Head First Servlets & JSP》一书中的部分核心知识点,实际内容还包括过滤器、监听器、MVC设计模式、JSTL等更广泛的主题,旨在帮助读者全面理解和掌握Servlet和JSP技术。通过深入学习,开发者能够构建高效...
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂且生动的方式介绍了23种经典设计模式。这些模式是软件工程中经过实践验证的最佳实践,旨在提高代码的可重用性、可读性和可维护性。下面,...
通过以上对“Head First设计模式”书中可能涉及的设计模式的介绍,我们可以看出这本书是学习面向对象设计模式的绝佳资源。无论是初学者还是有一定经验的开发人员,都能从中受益匪浅。理解并熟练运用这些模式能够帮助...
【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。
本学习笔记将深入探讨如何在C#中创建事件,以实现一个棒球模拟系统的例子。在这个系统中,我们将关注投球手、观众和裁判的交互,当输入棒球的轨迹和距离时,这些对象会根据模拟结果做出相应的反应。 首先,理解事件...
《Head First 策略者模式》学习笔记 策略者模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们常常遇到需要根据不同的情况执行不同算法的问题。策略者模式就是为了解决这类问题而生,它...
设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式