- 博客(31)
- 资源 (34)
- 收藏
- 关注
转载 设计模式之(二十二)访问者模式(visitor)
<br /> <br />Visitor模式定义:<br /> <br /> <br />表示一个作用于某对象结构(ObjectStructure)中各元素的操作(Element)。<br />它可以使你不修改各元素类的前提下定义作用于这些元素的新操作,<br />也就是动态的增加新的方法。(结合例子才能理解,说了些什么。。。)<br /> <br />Visitor模式结构图:<br /> <br /> <br /> <br /> <br /> <br /> <br /><br /> <br />Visi
2011-03-12 11:24:00 515
转载 设计模式之(二十一)模板模式(template)
设计模式》一书对Template Method模式是这样描述的:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。不改变算法的结构而重新定义它的步骤。我的理解:定义一个抽象类或者说接口,在它的内部定义一些抽象的方法(供TemplateMethod调用的步骤)和一个TemplateMethod方法(非抽象方法),封装了这些抽象方法的接口或抽象类就是骨架。而将它的实现延迟到子类中,也就是用子类实现它。不改变算法的结构而重新定义它的步骤,也就是改写或者实现父类的这些非TemplateMethod的抽象方法。下面
2011-03-12 10:49:00 494
转载 设计模式之(二十)策略模式(strategy)
GOF《设计模式》一书对Strategy模式是这样描述的:定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。Strategy模式使算法可独立于使用它的客户而变化。Strategy模式以下列几条原则为基础:1)每个对象都是一个具有职责的个体。2)这些职责不同的具体实现是通过多态的使用来完成的。3)概念上相同的算法具有多个不同的实现,需要进行管理。下面我将通过一个实例来说明它的具体使用,这个例子是关于数据库连接的。代码如下:public class DataBaseManager{ pu
2011-03-12 10:35:00 506
转载 设计模式之(十九)状态模式(state)
一、State模式定义: 允许一个对象在其状态改变时,改变它的行为。看起来对象似乎修改了它的类。 二、模式解说 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译。State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给
2011-03-12 10:17:00 530
转载 设计模式之(十八)备忘录模式(memento)
一、模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存前的状态。二、模式解说在程序运行过程中,某些对象的状态处在转换过程中,可能由于某种原因需要保存此时对象的状态,以便程序运行到某个特定阶段,需要恢复到对象之前处于某个点时的状态。如果使用一些公有接口让其它对象来得到对象的状态,便会暴露对象的实现细节。三、结构图1) 备忘录(Memento)角色:备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色
2011-03-12 09:41:00 499
转载 设计模式之(十七)中介者模式(mediator)
<br /> <br />一、模式定义:<br /> <br />用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。<br /> <br />二、结构图<br /><br /> <br />1) 抽象中介者:定义同事(Colleague)对象到中介者(Mediatior)对象的接口,通常是一个事件方法。<br /> <br />2) 具体中介者:具体中介者实现抽象中介者声明的方法。知晓所有的具体同事类,从具体同事接收消息向另外的具
2011-03-11 07:14:00 429
转载 设计模式之(十六)- 解释器模式(interpreter)
Interpreter模式的意图是可以按照自己定义的组合规则集合来组合可执行对象下面就讲一个我们日常最经常碰到的实例: 如一个公司有如下层次总裁(President),老板(Boss),项目经理(Manager),员工(Employee)一天,总裁接到一个邀请开发一套医疗管理系统,于是它就把老板叫来跟他简单说一下大概,然后就把相关事情交给老板了。 老板接到任务之后,看了看,就挑了一个精明能干的开发四部项目经理(***)去安排。四部经理拿到任务之后,立即对任务进行安排.设计图示如下:
2011-03-11 06:37:00 579
转载 Java中public、protected、package、private的访问权
Java中public、package、protected、private的访问权限如下表所示 注:package权限就是默认的访问权限,也就是default package 只能被同类或者同一个包中的类访问 prtected 只能被同类,同一包中的类,或者不同包中的子类访问 同一个类 同一个包 不同包的子类 不同包的非子类 public 可访问 可访问 可访问 可访问 protected 可访问 可访问 可访问 package 可访问
2011-03-10 10:49:00 2777
转载 设计模式之(十五)--命令模式(Conmmand)
<br />一、 Command模式定义:<br />将一个请求封装为一个对象,从而使你不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。<br />二、 模式解说<br />Commad模式是一种对象行为模式,它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)这里,"请求"(request)这个术语指的是要被执行的命令
2011-03-10 07:23:00 1062
转载 设计模式之(十四)--职责链模式(Chain Of Responsibility)
Chain of Responsibility模式定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。我的理解:在不止一个对象可以处理客户端请求的时候,为了使每个对象都有处理请求的机会,把这些对象顺序地串联起来形成一个链,每个被串联的对象都有一个指向下一个对象的指针,当请求到来是,按照顺序,先有第一个对象来处理这个请求,这个对象有两个选择:要么处理,要么把请求传给下一个对象(每个对象都有这两个选择),就这样
2011-03-09 22:40:00 458
转载 java实现多线程有两种方法
java实现多线程有两种方法1、继承Thread类2、实现Runnable接口这两种方法的共同点:不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。两种方法的不同点:1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承2、继承Thread类如果产生Thread实
2011-03-09 15:56:00 1868
转载 Java的数据类型
<br /><br />一,整型<br /> <br />byte 1个字节<br />short 2个字节<br />int 4个字节<br />long 8个字<br /> <br />二.实型<br /> <br />float 4个字节<br />double 8个字节<br /> <br />三.字符型<br /> <br />char 2个字节<br /> <br />四.对象型<br /> <br />Java中数组和String类型的都被解释为对象<br /> <br />五.其它<
2011-03-09 15:20:00 422
转载 Java的数据类型
<br /><br />一,整型<br /> <br />byte 1个字节<br />short 2个字节<br />int 4个字节<br />long 8个字<br /> <br />二.实型<br /> <br />float 4个字节<br />double 8个字节<br /> <br />三.字符型<br /> <br />char 2个字节<br /> <br />四.对象型<br /> <br />Java中数组和String类型的都被解释为对象<br /> <br />五.其它<
2011-03-09 15:20:00 341
转载 JVM中的栈和局部变量
<br />Java开发中,每当我们在程序中使用new生成一个对象,对象的引用存放在栈里,而对象是存放在堆里的。可以看出栈在Java核心的重要位置。今天我们就继续深入Java核心这个系列,为您介绍Java中的栈、局部变量及其之间的关系。<br /> Java中的栈<br /> 每当启用一个线程时,JVM就为他分配一个Java栈,栈是以帧为单位保存当前线程的运行状态。某个线程正在执行的方法称为当前方法,当前方法使用的栈帧称为当前帧,当前方法所属的类称为当前类,当前类的常量池称为当前常量池。当线程执行一个方法
2011-03-08 22:37:00 478
转载 Java堆、栈和常量池
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(public static final)。 6. 非RAM存储:硬盘等永久存储空间 这里我们主要关心栈,堆和常量池,对于栈(对
2011-03-08 22:23:00 483
原创 如何进行批量更新操作
<br />在进行大批量数据更新的时候,往往采用批量更新的方式,以下俺写了个例子,请大家参考一下:<br />--创建表<br />create table test1<br />(<br /> a varchar2(100),<br /> b varchar2(100)<br />); <br />create table test2<br />(<br /> a varchar2(100),<br /> b varchar2(100)<br />); <br />--插入语句 <br />de
2011-03-08 21:38:00 994
转载 ORACLE UPDATE 语句语法与性能分析的一点看法(转)
为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, --客户资料表 create table customers ( customer_id number(8) not null, -- 客户标示 city_name varchar2(10) not null, -- 所在城市 customer_type char(2) not null, -- 客户类型 ... ) create unique index PK_customers on customers (cust
2011-03-08 20:51:00 516
转载 设计模式之(十三)--观察者模式(observer)
《设计模式》一书对Observer是这样描述的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。举个例子,在现实生活中,父母与孩子是最亲密的人。父母做为孩子(被观察者)的监护人(观察者),当孩子和别人打架后,一定会告诉他的父母这件事(呵呵,当孩子很小时,通常会告诉父母,长大了以后,可能不会,这里的孩子指的是小孩子),当孩子获得奖学金后,也一定会告诉他的父母。下面我用Observer实现这个程序。代码如下:import java.util.Vector;
2011-03-07 07:35:00 471
转载 设计模式之(十二)--迭代器模式(iterator)
Iterator模式定义:提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。今天面试考到设计模式,我愣是没答上来,
2011-03-07 07:12:00 525
转载 设计模式之(十一)--享元模式(flyweight)
<br />一、FlyWeight模式定义:<br />运用共享技术有效地支持大量细粒度对象。<br />二、模式解说<br />也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight
2011-03-06 22:38:00 520
转载 设计模式之(十)--外观模式(facade)
GOF《设计模式》一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。 大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。 我就上面说的那个情形写一下实现代码,首先我们要实现二个
2011-03-06 22:09:00 700
转载 设计模式之(九)--包装模式(decorator)
《设计模式》一书对Decorator是这样描述的: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更为灵活。也就是说:动态地给对象添加一些额外的功能。它的工作原理是:创建一个始于Decorator对象(负责新功能的对象)终止于原对象的一个对象的“链”。例如,我们要为超市的收银台设计一个打印票据的程序,有的需要打印票据的头信息,有的需要打印票据的页脚信息,有的只需要打印票据的内容。如果针对每一种情况都修改一次程序,势必会很麻烦。这时我们可以考虑使用Decorator模式。
2011-03-06 21:53:00 8488
转载 设计模式之(八)--组合模式(composite)
<br />composite模式:<br />将对象组合成树形结构以表示“整体—部分”的层次结构。Composite模式使单个对象和组合对象的使用具有一致性。<br />下面给出这个模式的结构图:<br /> <br /><br />如果把Composite模式看成是树形结构的话,那么它主要角色有:<br />1) 树干角色(Component):该角色是一个抽象类,它定义了一些操作增删树叶(Leaf)的操作。<br />2) 树枝角色(Composite):树枝上有很多树干,树枝也是树干的一种。<br
2011-03-06 17:37:00 794
转载 设计模式之(七)--桥接模式(bridge)
《设计模式》一书对Bridge是这样描述的:将抽象与其实现解耦,使它们都可以独立地变化代码如下:public abstract class Shape{ protected Drawing myDrawing; abstract public void draw(); Shape(Drawing drawing) { myDrawing = drawing; } protected void drawLine() { myDrawing.drawLin
2011-03-06 16:50:00 617
转载 设计模式之(六)--适配器模式(adapter)
GOF《设计模式》一书对Adapter模式是这样描述的:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。例子如下:public interface Shape { public void display();}public class XXCircle { public void displayCircle() { System.out.println("通过XXCircle.displayCircle()画圆");
2011-03-06 16:22:00 485
转载 设计模式之(五)--代理模式(proxy)
一、 Proxy模式定义:为其他对象提供一种代理以控制这个对象的访问。二、 模式解说Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层,这个访问层也叫代理。Proxy模式是最常见的模式,在我们生活中处处可见,例如我们买火车票不一定非要到火
2011-03-06 16:06:00 498
转载 设计模式之(四)--建造者模式(builder)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式主要是为了将构建复杂对象的过程和它的部件解耦。使得我们不用去关心每个部件是如何组装的。示例如下:public interface Builder { public void buildPartA(); public void buildPartB(); public void buildPartC(); public Produ
2011-03-06 15:50:00 512
转载 设计模式之(三)--原型模式(prototype)
<br />Prototype模式的意图是:<br /> 通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。<br /> 在java的类库中已经实现了这一模式,只要你定义的类实现了Cloneable接口,用这个类所创建的对象可以做为原型对象进而克隆出更多的同类型的对象。代码如下:<br /> <br /> public class Temp implements Serializable{ private static final long serialV
2011-03-06 15:13:00 509
转载 设计模式之(二)--单例模式(singleton)
<br />设计模式》一书对Singleton模式是这样描述的:<br />保证一个类只有一个实例,并提供一个访问它的全局访问点。<br />单线程下,代码如下:<br />public class Singleton{ // 常量 private static final Singleton st = new Singleton(); // 私有的构造方法 private Singleton() { } // 公有的静态的对外取此类实例的方法 public st
2011-03-06 15:03:00 531
转载 设计模式之(一)--工厂模式(Factory)
个人建议设计模式学习方法:先不要理解一些抽象的概念,找到简单易懂的例子,拿到开发环境中,运行一下,了解其中接口和类的关系以后,再回过头来理解那些概念,这就好多了。工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。 工厂模式的形态工厂模式主要用一下几种形态: 1:简单工厂(Simple Factory)。 2:工厂方法(Factory Metho
2011-03-05 16:29:00 703
转载 理解ThreadLocal
ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。当使用ThreadLocal维护变量时,ThreadLocal为
2011-03-03 12:40:00 472
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人