• DAnalyzer 1.2发布啦 -- Weblogic与Directory协议分析工具

  • SQLView -- 可视化的Weblogic JDBC DEBUG

/Articles

Java多线程 - 对象不可变模式

对象不可变模式,关注的是多线程的数据安全,是说参与多线程的对象一旦在第一个线程内建立,便不会再被第二个线程的外部方法所改变。假设通过Point和Line类做图形的画线程序。定义起始点p1和终点p2,通过Line构造函数来定义一个线段,并简单通过System.out.println(line)来表示画一条坐标为(1,100)-(2,200)的线段。 public class Main { public static void main(String args[]){ Point p1 = new Point(1, 100); Point p2 = new Point(2,...

Java多线程 - 单一执行模式

用synchronized实现单一执行模式 多个线程在共享同一个资源时,用synchronized方法给资源加上同步锁,确保在同一个时间点上,只有唯一的一个线程占用该资源,这是单一执行模式的概念。同步锁可以附加在方法体上,给类实例this加锁,比如: public synchronized void myMethod(){ // } 或者在方法体内,给共享资源对象加锁, public void myMethod(){ synchronized(obj){ // } }...

在MFC中给程序注册热键

给程序注册一个热键相当简单,只需要调用Windows的API RegisterHotKey以及UnregisterHotKey即可,然后再创建一个函数来处理基于WM_HOTKEY的消息映像。 API原型 MSDN查看RegisterHotKey: BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk ); hWnd...

factory method模式利用template method模式生成实例

前面实验了template method的组装方法,父类中规定了子过程和最后的组装。子过程的实现是在子类中完成的,组装是父类完成。如果改造一下这个template method,把子过程用来生成一个具体的其他类的实例,就变成了工厂方法模式。 子过程可以生成一个其他类,如果有多个template method抽象类的子类,就可以生成多个不同类型的类。工厂模式的目的是根据条件生成不同的具体的类实例。...

builder模式将template method模式中的父类组装交给第三方

builder和template method非常相似,就是父类定义了一个组装过程中的每一个子过程。但是不同点是:最后所有这些子过程的的组装,是由不同的人完成的。template method模式中,父类负责所有总的组装;builder模式中,这些子过程的组装是由director来完成的。 builder抽象类只负责所有子过程的方法定义。 public abstract class Builder { protected abstract void dig(); protected abstract void construct(); protected...

singleton每时每刻只产生一个单一的实例

singleton模式可能是最简单最容易理解的一种设计了。就是在JVM运行时内,某个类永远只有一个实例存在。比如一个用来读写property属性文件的类,在整个应用中只需要一个单实例。 public class MySingleton { private static MySingleton instance = null; private MySingleton(){ //do initialization job }; public static MySingleton getInstance(){ if...

template method模式定义父类的流程(子过程)和组装

template method模式可以让我们顶一个类实现某个功能的的具体的流程,这个流程是规范的,不能被改变。每一个流程是一个方法,模板不定义方法体,方法体由不同的子类去做具体实施。 这就好比盖房这样的工程。盖房的流程是:挖地基、盖房、粉刷装饰。工程模板定义了这个流程的先后顺序,但是地基怎么挖,盖房怎么盖,由不同的房子(就是子类)的特点来决定。 加入盖房工程设计成一个类,我可以做成一个抽象类,build()方法内规定了工程的先后顺序,同时用final来限制,不允许子类重写这个方法修改顺序。...

adaptor模式修复现有API和需求的差异

Java IO的SDK中用了大量的adaptor模式来解决不同格式不同方式的文件的读写。它能为客户掩盖掉底层实现的细节。在实际的开发中,它应用于这种情形: 现有的SDK/API只是一部分满足自己的需求 所以,不满足的部分只能通过适配的方法来弥补。 比如我有一个220V的电源插座,现在要为不同的设备生产不同的插头,比如手机和笔记本。220V是属于需要被改造适配的adaptee,5V的手机插头和12V的笔记本插头是adaptor。有两种适配器的设计方式。 类继承的适配器方式 旧的API无法适应新的设备 public class Power220V { public...

observer模式实现事件驱动

用观察者模式处理Java里的图形编程事件响应,非常好理解。多个观察者通过注册事件监听器,监听被观察者,一旦被观察者有状态改变,会发送通知给所有这些观察者去响应。举个最简单的例子,多个病人去看病,首先挂号,然后等叫号。病人就是观察者,医生就是被观察者。医生一旦发出叫号信息,所有病人会检查该叫号判断是不是自己要去看病。 我现在要设计一个用户响应的程序,需要处理鼠标的输入事件。鼠标有单击、双击、右键单击。 我先定义一个事件对象,用来表示是什么事件,这个事件用来在观察者和被观察者种传输事件对象的状态。 import java.util.EventObject; public class...

iterator迭代模式替代循环数组

一般性地,用数组来保存同类型的对象,然后用for循环遍历这个数组就能取出所有的对象,这过程非常简单直接,很好用。 但是如果数组不适应了当前应用,开发人员决定用类似Vector或者ArrayList来保存这组对象,循环遍历就要重新改写。 迭代模式很好地解决了这个问题,循环遍历时,我不用担心对象组在内部是具体怎么保存的,到底是保存为数组还是保存为集合,完全不用操心。我只要知道统一的迭代方法就可以了。 假设我有一个果篮,里面存放了一堆苹果,我在取苹果的时候,完全不用去管苹果的堆放方式,我只要知道取完一个后自动指向下一个苹果。...

1 2 3 4 5 6 7 8 9 10