随笔分类 -  设计模式

摘要:package com.sc.test;public class SingletonMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Start"); Singleton obj1 = Singleton.getInstance(); Singleton obj2 = Singleton.getInstance();... 阅读全文
posted @ 2013-03-19 17:39 残星 阅读(240) 评论(0) 推荐(0) 编辑
摘要:首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本。通过ThreadLocal.set()将这个新创建的对象的引用保存到各线程的自己的一个map中,每个线程都有这样一个map,执行ThreadLocal 阅读全文
posted @ 2012-03-10 16:48 残星 阅读(6232) 评论(1) 推荐(6) 编辑
摘要:1.Singleton类public class Singleton {//Singleton类只会产生一个实例,Singleton类把singleton定义为static字段(类变量),再以Singleton类的对象实例进行初始化。//这个初始化的操作仅在加载Singleton类时进行一次。private static Singleton singleton=new Singleton();//Singleton类的构造函数是private的,主要是为了禁止从非Singleton类调用构造函数。//表达式new Singleton()不在此类之内,编译时仍然会出现错误。private Sin 阅读全文
posted @ 2012-03-10 16:18 残星 阅读(320) 评论(0) 推荐(0) 编辑
摘要:组合模式(Composite)将对象组合成树型结构以表示“部分-整体”的层次结构,Composite使得客户对单个对象和符合对象的使用具有一致性。Component(抽象构件接口)-为组合的对象声明接口-在某些情况下实现从此接口派生出的所有类共有的默认行为-定义一登上接口可以访问及管理它的多个子部件Leaf(叶部件)-在组合中表示叶结点对象,叶节点没有子节点-定义组合中接口对象的行为Composite(组合类)-定义有子节点(子部件)的部件的行为-存储子节点(子部件)-在Component接口中实现与子部件相关的操作Client(客户端)-通过Component接口控制组合部件的对象组合模式有 阅读全文
posted @ 2011-12-15 12:44 残星 阅读(173) 评论(0) 推荐(0) 编辑
摘要:命令模式(Command)把一个请求或者操作封装到一个对象中,从而达到用不同的请来对客户端进行参数化的目标;对请求排队或记录请求日志,以及支持可撤消的操作。命令模式的构成1.客户角色:创建一个具体命令对象,并确定其所接收者//客户角色public class Client {public static void main(String[] args) {Receiver receiver=new Receiver();Command command=new ConcreteCommand(receiver);Invoker invoker=new Invoker(command);invoke 阅读全文
posted @ 2011-12-15 12:35 残星 阅读(234) 评论(0) 推荐(0) 编辑
摘要:1、AWT、Swing事件模型所采用的模式:缺省的适配器模式public class AwtApp {public static void main(String[] args) {Frame frame=new Frame("title");frame.addMouseMotionListener(new MouseMotionAdapter(){@Overridepublic void mouseMoved(MouseEvent e){System.out.println("x:"+e.getX()+"\ty:"+e.getY() 阅读全文
posted @ 2011-12-14 21:57 残星 阅读(217) 评论(0) 推荐(0) 编辑
摘要:适配器(Adapter)模式把一个类的接口变换成客户端所希望的另一种接口,从而使原本因接口原因不匹配而无法工作的两个类能够一起工作。适配器(Adapter)模式的构成目标抽象角色(Target):定义客户要用的特定领域的接口适配器(Adapter):调用另一个接口,作为一个转换器适配器(Adaptee):定义一个接口,Adapter需要接入客户端(Client):协同对象符合Adapter适配器适配器的分类有三种类型的适配器模式public interface Target {public void method1();}public class Adaptee {public void me 阅读全文
posted @ 2011-12-14 20:06 残星 阅读(301) 评论(0) 推荐(0) 编辑
摘要:1.JUnit在TestCase中应用了模板方法模式:public void runBare() throws Throwable{ setUp(); try{ runTest(); }finally{ tearDown(); }}2.JUnit在TestCase类中应用了适配器(Adapter)模式:public void runBare()throws Throwable{ Throwable exception = null; setUp(); try { runTest(); } catch (Throwable running) { ... 阅读全文
posted @ 2011-12-14 16:08 残星 阅读(1043) 评论(0) 推荐(0) 编辑
摘要:模板方法模式(Template Method)定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。使用场合1)一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成。2)各子类公共的行为应该被提取出来并集中到一个公共父类中以避免代码的重复。首先识别现有代码的不同之处,并且把不同部分分离为新的操作,最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。3)控制子类的扩展。模板方法模式的组成父类角色:提供模板public abstract class AbstractClass {public void templa 阅读全文
posted @ 2011-12-14 13:53 残星 阅读(248) 评论(0) 推荐(0) 编辑
摘要:代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 代理模式一般涉及到的角色有 §抽象角色:声明真实对象和代理对象的共同接口§代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装§真实角色:代理角色所代表的真实对象,是我们最终要引用的对象参见程序Subject.java// 抽象角色 阅读全文
posted @ 2011-12-12 13:52 残星 阅读(349) 评论(0) 推荐(0) 编辑