设计模式再读

面向对象6原则及设计模式andorid中的应用http://www.jianshu.com/p/1a9f571ad7c0

1单例模式(http://www.blogjava.net/kenzhh/archive/2011/09/02/357824.html)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
(1)饿汉模式

1 public class Singleton {  
2     private static Singleton instance = new Singleton();  
3     private Singleton (){}
4     public static Singleton getInstance() {  
5     return instance;  
6     }  
7 } 

(2)懒汉模式(双重校验锁)
在JDK1.5之后,双重检查锁定才能够正常达到单例效果。

 package com.hollis;
import java.io.Serializable;
/**
 * Created by hollis on 16/2/5.
 * 使用双重校验锁方式实现单例
 */
public class Singleton implements Serializable{
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }

    private Object readResolve() {
        return singleton;
    }
}

解决序列化问题http://www.hollischuang.com/archives/1373
1.5以后的枚举方法

public enum  Singleton {

    INSTANCE;
    Singleton() {
    }
}

下面介绍三种工厂模式:封装对象的实例化细节,尤其是对于实例化较复杂或者对象的生命周期应该集中管理的情况。会给你系统带来更大的可扩展性和尽量少的修改量。


2简单工厂模式http://www.hollischuang.com/archives/1391
包含:抽象产品,具体产品,一个工厂
(把具体产品到工厂里去注册一下,然后由这个唯一的工厂来产生具体的产品)
缺点违背了开闭原则,因为新加一个产品的时候需要到工厂里里去注册一下,所以会修改这个工厂类
3工厂方法模式http://www.hollischuang.com/archives/1401
包含:抽象产品,具体产品,抽象工厂,具体工厂
每一个具体的工厂对应一个具体的产品,所以当需要增加新产品的时候只需要增加一个具体产品类,一个具体工厂类,而不需要修改之前的东西,所以不会违背开闭原则
4抽象工厂模式http://www.hollischuang.com/archives/1420
包含:抽象产品,具体产品,抽象工厂,具体工厂
与工厂方法模式不同点在于,这个具体工厂是用来产生一族产品族的产品,而不是某个特定的产品,像越野奔驰,越野特斯拉这两个运动族的汽车。
当增加一个产品族的时候只需要增加一个具体的产品工厂就好了。
但是当增加一个新的产品系列的时候比如增加一个奥迪品牌,这时候就违反开闭原则了。

5构建者模式http://www.hollischuang.com/archives/1477
包含:产品类,抽象构建者,具体构建者,指挥者
一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。这个有点蛋疼

6适配器模式http://www.hollischuang.com/archives/1524
GOF是这样给适配器模式(Adapter)定义的:将一个类的接口转化成用户需要的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
举例:用安卓充电器给苹果手机充电
有两个接口分别是安卓充电接口,苹果充电接口,安卓充电接口的实现类是一个安卓充电器。现在我要给苹果充电我就建一个adapter类去实现苹果充电的接口,*但是这个adapter类内部全是安卓的东西。
也就是说:把给苹果充电委托给了安卓充电器去处理*

你可能感兴趣的:(设计模式)