设计模式补漏

聚合关系:表示整体和部分的关系,部分可以脱离整体而存在

组合关系:也表示整体和部分的关系,但是整体和部分由相同的生命周期

1.单例模式分为懒汉式和饿汉式

饿汉式:
  public class Singleton{
  private static Singleton singleton = new Singleton ();
  private Singleton (){}
  public Singleton getInstance(){return singletion;}
  } 

  懒汉式:
  public class Singleton{
  private static Singleton singleton = null;
  public static synchronized synchronized getInstance(){
  if(singleton==null){
  singleton = new Singleton();
  }
  return singleton;
  }
  } 

  比较:
  饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
  懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
  推荐使用第一种 

 

2.实现相对于单例模式的多例模式

 

3.原型模式中的浅复制和深复制

  浅复制:如果是基本类型的话,那么直接拷贝一份,如果是对象的话,则复制引用,也就是指向原对象。

  深复制:不论是基本类型,还是对象,都复制一份,还原对象完全区分开

4.简单工厂模式又叫做静态工厂模式

 

5.享元模式:

  若一个对象的状态可以分为内部状态和外部状态,但是内部状态较多时,我们使用享元模式,先保存对象内部状态

  到一个工厂,然后使用时直接返回这个对象给另一个对象,多个对象共享这个对象的内部状态,然后在对另一个对象

  设置外部状态,当大量相似对象很多时,用共享对象代替内部状态,只用设置外部状态。(外部状态不属于对象的一部分)

 

6.外观模式:提供统一的接口,封装复杂逻辑

7.代理模式:声明一个抽象主题,然后代理和真是主题继承自抽象主题,代理中保存抽象主题的实例

  虚拟代理:要创建一个资源消耗大的对象,先创建一个资源消耗小的对象,真是对象只有在使用时才被创建

  远程代理:位于不同地址空间中的对象提供一个本地代理对象

  保护代理:控制一个对象的访问,可以给不同用户,不同级别的访问

8.桥接模式:将抽象化和实例化解耦,使二者可以独立的变化(不同平台播放不同的视频文件)

9.适配器模式:对接口进行改造,是接口不兼容的那些类可以正常的工作

10.组合模式:通过组合多个对象,形成树形结构,以表示整体和部分的关系,一般包括,抽象主题,然后实体主题和容器继承抽象主题,比如文件和文件夹的关系。

11.观察者模式:定义了一种一对多的关系模式,有一个主题,可以添加和删除观察者,当一个对象发生改变的时候,其相关对象都得到通知并被自动更新。

12.职责链模式:一个请求没有被应答是会沿着链往上走,知道找到相应的对象来应答

13.命令模式:将执行命令和发出命令分别封装成不同的对象,一方不必要知道另一方的接口

14:解释器模式:对应解释型的语言的类型

  

//文法如下
expression::= direction action distance | composite
composite::=expression 'and' expression
direction::='up' | 'down' | 'left' | 'right'
action::='run'| 'move'
distance::=an integer

 abstract class AbstractNode()
{
       public abstract String interpret();
}

//and解释器

class AndNode extends AbstractNode()
{
      private AbstractNode left;
      private AbstractNode right;

      public AndNode(AbstractNode left,AbstractNode right)
      {
                     this...
      }
      public String interpret()
      {
             left.interpret()+"再"+right.interpret();
      }
}

可以用这个模式来定义解释器。。。。

posted @ 2012-06-14 20:55  张兰云  阅读(493)  评论(0编辑  收藏  举报