摘要: 定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类型:行为类模式类图: 访问者模式可能是行为类模式中最复杂的一种模式了,但是这不能成为我们不去掌握它的理由。我们首先来看一个简单的例子,代码如下:[java] view plaincopyclassA{publicvoidmethod1(){System.out.println("我是A");}publicvoidmethod2(Bb){b.showA(this);}}classB{publicvoidshowA(Aa){a.method1();}} 我们主要来看一下 阅读全文
posted @ 2013-04-15 09:12 Kevin.Xi 阅读(148) 评论(0) 推荐(0)
摘要: 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类型:行为类模式类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分:抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略, 阅读全文
posted @ 2013-04-14 17:15 Kevin.Xi 阅读(133) 评论(0) 推荐(0)
摘要: 定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式类图: 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。比如,我们要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单;再比如,我们要设计一个自动部署的功能,就像eclipse开发时,只要修改了文件,eclipse就会自动将修改的文件部署到服务器中。这两个功能有一个相似的地方,那就是一个对象要时刻监听着另一个对象,只要它的状态一发生改变,自己随之要做出相应的行动。其实,能够实现这一点的方案很多 阅读全文
posted @ 2013-04-14 17:15 Kevin.Xi 阅读(123) 评论(0) 推荐(0)
摘要: 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类型:行为类模式类图: 事实上,模版方法是编程中一个经常用到的模式。先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来。经过分析之后,这个任务大体上可分为两部分,排序和打印,打印功能好实现,排序就有点麻烦了。但是A有办法,先把打印功能完成,排序功能另找人做。[java] view plaincopyabstractclassAbstractSort{/***将数组array由小到大排序*@paramarray. 阅读全文
posted @ 2013-04-14 17:13 Kevin.Xi 阅读(145) 评论(0) 推荐(0)
摘要: 特点:一个非常优雅的JS库,定义了JS的面向对象扩展,DOM操作API,事件等等,之上还有rico/script.aculo.us实现一些JS组件功能和效果(尚不够完善),以prototype为核心,形成了一个外围的各种各样的JS扩展库,是相当有前途的JS底层框架,突出特点就是非常易学易用,门槛很低,常常是一两行JS代码就可以搞定一个相关的功能。同时它也是RoR集成的AJAX JS库。Prototype官方站点No2—Dojo 特点:Dojo包括了Javascript本身的语言扩展,以及各个方面的工具类库,和比较完善的UI组件库;Dojo设计的包加载机制(Package System)和... 阅读全文
posted @ 2013-04-14 17:12 Kevin.Xi 阅读(99) 评论(0) 推荐(0)
摘要: 创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对象,而不用去关心如何创建对象。创建类模式有5种,分别是:单例模式:用于得到内存中的唯一对象。工厂方法模式:用于创建复杂对象。抽象工厂模式:用于创建一组相关或相互依赖的复杂对象。建造者模式:用于创建模块化的更加复杂的对象。原型模式:用于得到一个对象的拷贝。为什么需要创建性模式 首先,在编程中,对象的创建通常是一件比较复杂的事,因为,为了达到降低耦合的目的,我们通常采用面向抽象编程的方式,对象间的关系不会硬编码到类中,而是等到调用的时候再进行组装,这样虽然降低了对象间的耦合,提高了对象复用的可能,但在一定程度上将组装 阅读全文
posted @ 2013-04-14 17:10 Kevin.Xi 阅读(140) 评论(0) 推荐(0)
摘要: 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中 阅读全文
posted @ 2013-04-14 17:09 Kevin.Xi 阅读(122) 评论(0) 推荐(0)
摘要: 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类型:创建类模式类图:四个要素产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。导演类:负责调 阅读全文
posted @ 2013-04-14 17:08 Kevin.Xi 阅读(149) 评论(0) 推荐(0)
摘要: 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建类模式类图:工厂方法模式代码[java] view plaincopyinterfaceIProduct{publicvoidproductMethod();}classProductimplementsIProduct{publicvoidproductMethod(){System.out.println("产品");}}interfaceIFactory{publicIProductcreateProduct();}classFactoryimplementsI 阅读全文
posted @ 2013-04-14 17:05 Kevin.Xi 阅读(135) 评论(0) 推荐(0)
摘要: 定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。 在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族 阅读全文
posted @ 2013-04-14 17:05 Kevin.Xi 阅读(133) 评论(0) 推荐(0)
摘要: 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式类图:类图知识点:1.类图分为三部分,依次是类名、属性、方法2.以>结尾的为注释信息3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。4.带下划线的属性或方法代表是静态的。5.对类图中对象的关系不熟悉的朋友可以参考文章:设计模式中类的关系。单例模式应该是23种设计模式中最简单的一种模式了。它有以下几个要素:私有的构造方法指向自己实例的私有静态引用以自己实例为返回值的静态的公有的方法 单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式 阅读全文
posted @ 2013-04-14 17:03 Kevin.Xi 阅读(107) 评论(0) 推荐(0)
摘要: Jvm的垃圾回收机制到底会不会回收掉长时间不用的单例模式对象,这的确是一个比较有争议性的问题。将这一部分内容单独成篇的目的也是为了与广大博友广泛的讨论一下这个问题。为了能让更多的人看到这篇文章,请各位博友看完文章之后,点一下“顶”,让本篇文章排名尽量的靠前。笔者在此谢过。讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收。 首先说一下为什么会产生这一疑问,笔者本人再此之前从来没有考虑过垃圾回收对单例模式的影响,直到去年读了一本书,《设计模式之禅》秦小波著。在书中提到在j2ee应用中,jvm垃圾回收机制会把长久不用的单例类对象当作垃圾,并在cpu空闲的时候对其进行回收。之前读 阅读全文
posted @ 2013-04-14 17:03 Kevin.Xi 阅读(295) 评论(0) 推荐(0)
摘要: 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修改关闭,并没有明确的告诉我们。以前,如果有人告诉我“ 阅读全文
posted @ 2013-04-14 17:02 Kevin.Xi 阅读(168) 评论(1) 推荐(0)
摘要: 定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的。 迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是 阅读全文
posted @ 2013-04-14 17:01 Kevin.Xi 阅读(115) 评论(0) 推荐(0)
摘要: 定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。举例来说明接口隔离原则:(图1 未遵循接口隔离原则的设计) 这个图的意思是:类A依赖接口I中的方法1、方法2、方法3,类B是对类A依赖的实现。类C依赖接口I中的方法1、方法4、方法5,类D是对类C依赖的实现。对于类B和类D来说,虽然他们都存在着用不到的方法(也就 阅读全文
posted @ 2013-04-14 16:41 Kevin.Xi 阅读(129) 评论(0) 推荐(0)
摘要: 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。 依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽 阅读全文
posted @ 2013-04-14 16:32 Kevin.Xi 阅读(108) 评论(0) 推荐(0)
摘要: 一、trunc的用法1.trunc(for dates) trunc函数为指定元素而截去的日期值。 其具体的语法格式如下: trunc(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指定的元素格式所截去。忽略他则由最近的日期截去例如:select trunc(sysdate, 'mm') from dual; --截取到“月”,如果传入的是:'2010-11-01',则需先转化为date2.trunc(for number) trunc函数返回处理后的数值,其工作机制和round函数极为类似,只是... 阅读全文
posted @ 2013-04-14 13:45 Kevin.Xi 阅读(1181) 评论(0) 推荐(0)
摘要: COMMENT ON COLUMN TABLE_NAME.COL_NAME IS '列注释';--给列添加注释 COMMENT ON TABLE TABLE_NAME IS '表注释'; --给表添加注释 阅读全文
posted @ 2013-04-14 13:36 Kevin.Xi 阅读(313) 评论(0) 推荐(0)
摘要: 1、union --可以把两个不同的表的数据汇总到一个结果集中selectid from stud1 union selectid from stud2; --这样就会把stud1和stud2 的id都列出来,当然你就可以放到list去了。会自动排序,并且合并相同的记录。2、union all 作用跟union相同,但是不会自动排序,也不会合并相同记录。3、decodedecode的语法:decode(value,if1,then1,if2,then2,if3,then3,...,else)表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值, 阅读全文
posted @ 2013-04-14 13:35 Kevin.Xi 阅读(164) 评论(0) 推荐(0)
摘要: 测试环境:mysql 5.0.45【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】一、连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>2、连接到远程主机上的M 阅读全文
posted @ 2013-04-14 13:20 Kevin.Xi 阅读(121) 评论(0) 推荐(0)