简单设计模式整理

单例模式

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

单线程懒汉版本:

package designpattern;

public class Singleton {
    private static Singleton instance=null;
    
    private Singleton(){        
    }
    
    public static  Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
    
}

饿汉版:

package designpattern;

public class Singleton {
    private static Singleton instance=new Singleton();
    
    private Singleton(){        
    }
    
    public static  Singleton getInstance(){
        return instance;
    }
    
}

利用内部类实现多线程懒汉版 (单例模式使用内部类来维护单例的实现,JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。

package designpattern;

public class Singleton {
    
    private Singleton(){        
    }
    
    private static class SingletonFactory{
        private static Singleton instance = new Singleton();
    }
    
    public static  Singleton getInstance(){
        return SingletonFactory.instance;
    }
    
}

策略模式

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。

模板方法模式

模板方法模式——在一个抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中去实现。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。

代理模式

代理模式英文名Proxy Pattern,是23种常用设计模式之一,它的功能是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

装饰者模式

动态地给一个对象添加一些额外的职责或者行为。就增加功能来说, Decorator模式相比生成子类更为灵活。
装饰器模式的应用场景:
  1、需要扩展一个类的功能。
  2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!

观察者模式

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者。当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,考虑使用观察者模式。

 工厂相关:

以前整理过:http://249326109.iteye.com/admin/blogs/2025966

参考:

http://blog.csdn.net/u010850027/article/category/2135695/2

http://zz563143188.iteye.com/blog/1847029

原文地址:https://www.cnblogs.com/jdflyfly/p/3877542.html