设计模式补漏
聚合关系:表示整体和部分的关系,部分可以脱离整体而存在
组合关系:也表示整体和部分的关系,但是整体和部分由相同的生命周期
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();
      }
}
可以用这个模式来定义解释器。。。。
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号