脚本之家(jb51.cc)设计模式栏目主要收集java设计模式资料。
1.14 构建器模式 Builder 用于构建负责复杂对象,比如构建一个对象,需要传50个参数进去 例如我的世界中地形的类,用于构建一块地形,需要传入墙,草,陷阱等等许多参数,那么可以定义构建器接口,
1.6 责任链模式 使用场景:例如在论坛上发表文章上传到服务器,我们要进行脱敏,检查是否有黑客代码等,需要进行过滤。如果过滤都写在一块,一方面不方便扩展,一方面代码臃肿(有可能每一种过滤的代码特别多)
1.11 代理模式 Proxy(重要) 1.11.1 聚合方式(静态代理) 该代理需要和被代理对象实现相同的接口 ==该代理聚合了car,代理了car的move方法,自己添加了打点计时。其他所有工作都
1.3 工厂模式 任何可以产生对象的方法或类,都可以称之为工厂,单例也是一种工厂,为什么有了new之后,还需要工厂呢?以汽车举例: 1.3.1 简单工厂:产品维度扩展 基于最简单的工程的改进: 改进后
1.1 单例模式 singleton Spring的Bean工厂就是单例模式,项目中自己写的情况越来越少 1.1.1 工程中最常用版本 饿汉式 1.1.2 双重锁检查 懒汉式 1.1.3 完美版本,但
定义: 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 实现思路: 1、通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保
引自:http://dotnetfresh.cnblogs.com/archive/2005/06/27/181878.html 向依赖关系宣战                                         依赖倒置、控制反转和依赖注入辨析 在《道法自然——面向对象实践指南》一书中,我们采用了一个对立统一的辩证关系来说明“模板方法”模式—— “正向依赖 vs. 依赖倒置”(参见:
  板桥里人 http://www.jdon.com 2006/7/10   2004年著名建模专家Eric Evans发表了他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文译名:领域驱动设计 2006年3月清华出版社译本,或称 Domain Driven-Design archite
类间关系 在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。 (1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能
一、起因   公司交给我一个任务,为测试员写一个手机模拟界面,以方便她们的手机短信测试。过去她们都是用MC4J直接调用公司服务器的MBean服务来模拟进行测试,以验证我们整个系统平台。这种测试主要是检查收发短信是否正常,而我的要做的工作就是,让她们在测试的时候更方便更直观。 二、需求   我和测试员陈MM(也就是软件的使用者)约定了一个时间,大家一起来讨论这个软件的需求。   1、首先,我大概了解
里氏代换原则(LSP) 面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化。具体化可以给出不同的版本,每个版本都给出不同的实现。 从抽象化到具体化的导出要是用继承关系和里氏代换原则。(Liskov Substitution Principle).(LY注:实现OCP原则(开闭原则)的关键步骤是抽象化,而继承是实现抽象方法的重要手段。里氏原则是对开闭原则的抽象化的具体步骤的补充。) 里氏代换
2004年著名建模专家Eric Evans发表了他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文译名:领域驱动设计 2006年3月清华出版社译本,或称 Domain Driven-Design architecture [Evans DDD])。   Martin Fowler作序说;
  这两天学习设计模式,看到了关于依赖反转方面的东西,就依赖反转而言简单来说就是:软软设计存在抽象层和实现层之分,一般情况下是抽象依赖于实现,这很容易理解,但是问题在于抽象层相对稳定,实现层容易变化,抽象层应该具有较实现层更高的复用性,它就应该我们设计和考量的核心与重点,而不是具体的实现,这样一来,要求我将依赖关系反转过来,即实现应该依赖于我们的抽象,这样的设计才是灵活和易于扩展的。如此一来,依赖
dfdsffdfsaf 
 在嵌入式程序开发过程中,程序员要进行大量的调试,以此验证程序的正确性,修改潜在的错误。调试器对于程序员来说是不可或缺的必备工具。在Linux环境中,有很多调试工具和调试辅助工具,例如GDB、XXGDB、RHIDE、XWPE、GVD和DDD等。其中,DDD是命令行调试器的图形前端,除了一般的程序调试功能以外,还具有交互式图形数据显示的功能。它在嵌入式应用开发中也十分出色。本文主要讲述DDD(Dat
 在嵌入式程序开发过程中,程序员要进行大量的调试,以此验证程序的正确性,修改潜在的错误。调试器对于程序员来说是不可或缺的必备工具。在Linux环境中,有很多调试工具和调试辅助工具,例如GDB、XXGDB、RHIDE、XWPE、GVD和DDD等。其中,DDD是命令行调试器的图形前端,除了一般的程序调试功能以外,还具有交互式图形数据显示的功能。它在嵌入式应用开发中也十分出色。本文主要讲述DDD(Dat
针对颜色直方图和颜色矩无法表达图像色彩的空间位置的缺点,Pass[9]提出了图像的颜色聚合向量(color coherence vector)。它是颜色直方图的一种演变,其核心思想是将属于直方图每一个bin的像素进行分为两部分:如果该bin内的某些像素所占据的连续区域的面积大于给定的阈值,则该区域内的像素作为聚合像素,否则作为非聚合像素。假设αi与βi分别代表直方图的第i个bin中聚合像素和非聚合
上面,你学到了如何开发藕合松散的服务组件.但是,为了存取那些服务对象,你需要通过服务器的JNDI来查找存根对象(session bean)或消息队列(MDB).JNDI查找是把客户端与实际的服务端实现解藕的关键步骤.但是,直接使用一个字符串来进行JNDI查找并不优雅.有这 样几个原因: ・客户端与服务端必须有一致的基于字符串的名字.它没有在编译时得到认证或在布署时得到检查. ・从JNDI返回的服务
        秉承《重构》的风格,该书也是同样的冗长和繁复,说了为了再现真实的代码。以前,或许我会同意,但是现在已经受不了了。如果电影院不是放大片,而是如现实 生活一般平淡的镜头,你还会去看么?同样,文学作品即便是基于生活,也是经过提炼,浓缩和升华的。所以,我已经没有耐心慢慢跟你去从平凡中发现什么真理 了。好吧,书名已经说了,是TDD By Example。      因为TDD的所有元素都已经
CppUnit测试框架入门 作者:Jack Ho 下载源代码   测试驱动开发(TDD)是以测试作为开发过程的中心,它坚持,在编写实际代码之前,先写好基于产品代码的测试代码。开发过程的目标就是首先使测试能够通过,然后再优化设计结构。测试驱动开发式是极限编程的重要组成部分。XUnit,一个基于测试驱动开发的测试框架,它为我们在开发过程中使用测试驱动开发提供了一个方便的工具,使我们得以快速的进行单元测
[Mental Studio]猛禽[Blog] (这篇文章始作于两年前,当时本来是想以我为备份自己的BLOG而写的一个小程序为例来说明我的这一想法。不过因为那个程序缺乏通用性,后来没有再去完善它,结果 这篇文章也就被放下了。然后又有很长一段时间忙于别的事情,没有接触原生应用开发。直到最近才因为在研究SQLite时,写了个简单的程序,并且在其中运用了两 年前的这一思路,故决定以新程序为例把这篇文章完
类间关系 在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。 (1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能
  package  org.exception; /** */ /**  * 订单管理系统的基础错误  *   * @author rodney  *   */ public   class  OrderBaseException  extends  RuntimeException  ... {     /** *//**      *       */     private static 
 在继续<设计模式精解>这本书之前,我们来学习些OOD的一些设计原则.这些原则在提高一个系统可维护性的同时,提高这个系统的可复用性.他们是一些指导原则,依照这些原则设计,我们就可以有效的提高系统的复用性,同时提高系统的可维护性.       这些OOD原则的一个基石就是"开-闭原则"(Open-Closed Principle OCP).这个原则最早是由Bertrand Meyer提出,英文的原文
从上一篇的"开-闭"原则中可以看出,面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化.这个导出要使用继承关系和一个原则:里氏代换原则(Liskov Substitution Principle, LSP).       那么什么是里氏代换原则呢?有个严格的表述,绕口,不好记.还是比较白话的这个好记.说的是:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它察觉不出基类对象
合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。聚合表示整体和部分的关系,表示“拥有”;合成则是一种更强的“拥有”,部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。       换句话说,合成是值的聚合(Aggregation by Value),而一
  "开-闭"原则是我们OOD的目标,达到这一目标的主要机制就是"依赖倒转原则".这个原则的内容是:要依赖于抽象,不要依赖于具体.       对于抽象层次来说,它是一个系统的本质的概括,是系统的商务逻辑和宏观的,战略性的决定,是必然性的体现;具体的层次则是与实现有关的算法和逻辑,一些战术性的决定,带有相当大的偶然性.传统的过程性系统设计办法倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具
正规的软件开发过程太烦琐,我们真的需要一个简单高效一点的开发模式,比如XP和Agile。至于什么是XP和Agile,我以为关键都是要充分发挥开发人员的主观能动性,而不仅仅把其当作一颗螺丝钉。 自从上次安装了一个 Mingle的测试版, 就觉得这就是我想像中的Agile项目管理工具,相比之下MS Project太过于烦琐!Mingle最让我喜欢的地方就是Use Story和Release Itera
在去北京参加infoq大会之前,我就开始了对DDDQuickly的翻译工作,如今,在我和 泰稳的努力下,它终于可以跟大家见面了。我心甚慰。 可以去 infoq中文站免费获得此 迷你书。   ======================================   序言 在2004年之前的某一天,我跟所在部门的一个设计师进行沟通,当时他为自己的一个思路兴奋不已,而我要做的事情就是跟他讨论清楚
      转篇文章,原文章的地址:http://www.itisedu.com/phrase/200603121128285.html         测试驱动开发(Test-Driven Development,TDD)是通过测试定义所要开发的功能的接口,然后实现功能的开发过程。      (TDD),是Extreme Programming (XP)--极限编程的一个重要组成部分。在上面的图