设计
文章平均质量分 62
塘外人
我是程序猿
展开
-
一个简单的示例揭秘LSP原则真谛
对LSP的理解,之前只停留在表面,并未深入理解。表面理解是指认为LSP就是仅仅依靠面向对象多态的特性,在使用基类对象的地方都能使用子类对象简单的替换。这还不是严格的遵循LSP。真正的要遵循LSP原则,是必须子类和基类行为上的绝对一致。基于契约的设计可以很好的保证了对LSP的遵循。下面简单的java代码,揭示了LSP真谛:package com.oop.lsp;public cl原创 2011-12-01 00:03:09 · 2978 阅读 · 0 评论 -
【读书笔记】HeadFirst设计模式——命令模式简述
今天又复习了一遍命令模式命令模式是指,将“请求”封装成命令对象。命令对象是通过封装接收者和绑定一组动作来封装请求的。通过命令模式,将动作的请求者和动作的执行者进行解耦。即请求的调用者只接收并处理命令对象,但并不知道命令对象所封装的特定接收者。command模式的结构图:即,客户使用命令接收者(Receiver)来创建命令对象(ConcreteCommand),并将命令对象交原创 2012-03-21 00:04:32 · 1240 阅读 · 0 评论 -
【读书笔记】AgilePPP——咖啡的启示
按行为划分系统•程序的中心是行为•不基于行为的系统划分,基本上是严重错误的。•正是系统的行为为我们提供了第一个关于应该如何划分系统的线索水蒸气类•没有任何成员变量、状态•只是一个调用转换器•水蒸气类没有存在的必要虚拟抽象•抽象是非常微妙的•对抽象类,多问问:谁使用它们?•一个仅仅含有抽象方法并且不具有任何使用者的类,完全是一个无用的类原创 2012-01-09 00:11:41 · 943 阅读 · 0 评论 -
【读书笔记】AgilePPP——系统设计:简单设计
系统设计的本质•系统设计的本质是寻找隐藏于应用背后抽象•需求和用例不会表述或提及这些抽象,它们太过专注细节以至于不能表达底层抽象的一般性如何抽象•抽象需要根据需求的全局来展开•不能只按个别用例来展开•抽象就是归纳、总结,并提炼需求的共同逻辑关于数据库•数据库是实现细节!应该尽可能的推迟考虑数据库。有太多的应用程序之所以和数据库绑定在一起而原创 2012-03-14 00:43:36 · 1043 阅读 · 0 评论 -
【读书笔记】AgilePPP——设计模式
Command模式Command模式的3种用法Active object模式是对Command的应用是实现多线程的基础技术Active Object 并发模式在 Java 中的应用http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/index.html模板方法与策略模式为什么说组原创 2012-03-14 00:39:41 · 1075 阅读 · 0 评论 -
【读书笔记】AgilePPP——敏捷设计
敏捷设计•全局视图和软件一起演化•设计尽可能适合当前系统,关注当前系统结构•增量地演化出系统最佳架构和设计•设计和架构过程是持续不断进行的•从根本上讲,源代码就是设计•敏捷设计是一个过程,不是一个事件,是一个持续的应用原则、模式以及实践来改进软件结构和可读性的过程•敏捷设计步骤–遵循敏捷实践去发现问题–应用设计原则去诊断问题–应用适当模式去解决问题原创 2011-12-05 23:45:23 · 715 阅读 · 0 评论 -
桥接模式:从操作系统的可移植性说起
桥接模式:将抽象部分与它的实现部分分离,使得二者可以独立地变化。(说实话,这个很难理解!!!)抽象部分:继承关系里的抽象类,一般位于上层,平台无关实现部分:继承关系里的实现类,一般位于底层,平台相关、实现细节还是不理解,看实例讲解吧!比如对一个操作系统来说,平台无关的是高层代码,属于抽象部分,而底层Bootloader、驱动程序则属于实现部分,是平台相关的。这里假设该操作系统具有良原创 2012-03-26 23:12:22 · 5399 阅读 · 1 评论 -
【读书笔记】HeadFirst设计模式——代理和装饰者
代理——控制对主题的访问,有时控制主题的创建,完全代替主题,或者什么都不做,只是简单转发装饰者——只添加新功能,不做其他控制从使用者的角度看,代理一般不改变对象行为,装饰肯定会增加对象行为。代理:装饰者:原创 2012-03-25 01:36:50 · 1456 阅读 · 2 评论 -
【读书笔记】HeadFirst设计模式——装饰者和适配器的区别
装饰者和被装饰者实现了同一个接口,给被装饰者增加功能。即装饰者和被装饰者一定是在同一继承体系的。适配器和被适配者不实现同一接口,适配器将被适配者转换成客户适用的接口暴露给客户使用。装饰者:适配器:原创 2012-03-25 01:25:08 · 1488 阅读 · 0 评论 -
【读书笔记】HeadFirst设计模式——状态和策略
一、状态模式实现:1.每个动作一个方法2.每个状态一个类二、状态模式和策略模式的区别:状态模式——状态频繁的发生变化策略模式——策略在制定后,一般不变状态:策略:原创 2012-03-25 01:22:02 · 1237 阅读 · 0 评论 -
【读书笔记】HeadFirst设计模式——工厂模式简述
简单工厂:提供一个方法创建单个对象(方法内部往往包含对参数的判断来创建具体的对象),供外部对象使用——组合工厂方法:是一个特殊的模板方法,由子类创建具体的对象,供父类使用——继承抽象工厂:提供一组方法创建对象家族,供外部对象使用——组合PS:简单工厂可以看成是简单的抽象工厂,只创建一个对象的抽象工厂原创 2012-03-17 02:32:22 · 1150 阅读 · 0 评论 -
源代码就是设计(Jack Reeves著)
源代码就是设计Jack Reeves著 邓辉 译本文摘自《敏捷软件开发:原则、模式与实践》(清华大学出版社,2003年9月版)。这是一篇伟大的论文,该文撰写于1992年,作者在当时就能有这样的反思,实在是非常了不起。至今,我仍能记起当我顿悟并最终产生下面文章时所在的地方。那是1986年的夏天,我在加利福尼亚中国湖海军武器中心担任临时顾问。在这期间,我有幸参加了一转载 2012-02-05 01:21:43 · 3173 阅读 · 0 评论 -
Bridge模式
一、 桥梁(Bridge)模式桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。注:《Java与模式》一书认为Bridge模式不是一个使用频率很高的模式,我不太赞同,我认为Bridge模式中蕴涵了很多设转载 2012-02-02 00:50:01 · 9089 阅读 · 0 评论 -
使用命令模式实现简单的支持撤销的计算器
1.支持的操作符有 "+", "-", "*", "/"2.撤销符号为"3.例如输入"1", "+", "2", "4.例如输入"100", "/", "2", "要求:1)使用TDD 2)使用命令模式5.简单类图设计6.单元测试package com.pattern.command;import junit.framewor原创 2011-12-16 01:24:16 · 1773 阅读 · 2 评论 -
【读书笔记】HeadFirst设计模式——单件不简单:详述实现Singleton模式需要考虑的方方面面
(参考:深入浅出单实例Singleton设计模式)什么是单件?单件就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。——GOF单件模式简单吗?简单,的确简单,因为只有一个类。单件不简单!其实单件并不见得简单,而且还有点小复杂。其复杂度正是为了保证单件所要达到“仅有一个实例”的宏伟目标而引起的。当然在一般情况下,单件是简单的。但是在考虑了懒加载、并发、原创 2012-03-20 00:59:12 · 1330 阅读 · 0 评论