研读设计模式小结

1. 设计模式:

  指在软件开发过程中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

2. 简单工厂:

  本质: 选择实现。

注意:简单工厂的重点在选择,实现是已经做好的。简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端与实现之间解耦。

实现简单工厂的难点在于“如何选择”实现,有传递参数的方法,有动态参数的方法。

 /**简单工厂 */
public class Factory {

    public static Api create_GetApi(int type) {

    Api api = null;
    if (type == 1) {
        api = new Api1();
    } else if (type == 2) {
        api = new Api2();
    }
    
    return api;
    }
}


使用时:

Api api = Factory.create_GetApi( 1 );



3. 外观模式 Facade

  本质:封装交互,简化调用。

  外观模式封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用。通过外观,子系统为外部提供一些高层的接口,方便使用。

  客户端不需要去关心子系统内部模块的变动情况,只与这个外观类有依赖关系。

/*外观模式 Facade*/
public class FacadeApi {
    
    private FacadeAp i ( ) {    }
    
    public static void test ( ) {
    AModuleApi a = new AModuleImpl();
    a.testA();
    BModuleApi b = new BModuleImpl();
    b.testB();
    CModuleApi c = new CModuleImpl();
    c.testC();
    }
}

/*外观模式 Facade*/
public interface FacadeApi{
    
    //对外提供的组合方法
    public void test();
    
    //这些是ABC模块对子系统外的接口
    public void a1();
    public void b1();
    public void c1();
}


4.  适配器模式

  本质:转换匹配,利用功能

  适配器通过转换现在的实现,从而能把已有的实现匹配成需要的接口。转换匹配是手段,利用已有的功能才是目的。

  在实现的时候,适配器通常是一个类,一般会让适配器类去实现Target接口,然后在适配器的具体实现里面调用Adaptee。也就是说,适配器通常是一个Target类型,而不是Adaptee类型。

public class TwoDirectAdapter implements LogDBApi, LogFileApi {
    
    private LogDBApi dbLog;
    private LogFileApi fileLog;
    
    public TwoDirectAdapter( LogDBApi db , LogFileApi file) {
       this.dbLog = db;
       this.fileLog = file;
    }
    
    /*把文件操作的方式适配成DB实现方式;*/
    public void createLog( LoginModule lm) {
        // 1. 读取文件内容;
        // 2. 加入新的日志对象;
        // 3. 重新写入文件;
    }
}


5. 单例模式 Singleton

  本质: 控制实例数目

  单例模式是用来保证这个类在运行期间只会被创建一个类实例,另外,单例模式还提供了一个全局唯一访问这个类实例的访问点。

/*  懒汉式单例 */
public class Singleton {
    
    private static Singleton uniqueInstance = null;
    private Singleton() {}
    
    public static synchronized Singleton getInstance ( ) {
    
       if ( uniqueInstance == null ) {
           uniqueInstance = new Singleton();
       }
    
       return uniqueInstance;
    }
}


/*  饿汉式单例 */
public class Singleton {
    
    private static Singleton uniqueInstance =  new Singleton();
    private Singleton() {}
   
    public static  Singleton getInstance ( ) {
        return uniqueInstance;
    }
}

/* 最优的单例 */
public class Singleton {
    
    private static class SingletonHolder{

      private static Singleton uniqueInstance =  new Singleton();
     }

    private Singleton() { }
   
    public static  Singleton getInstance ( ) {
        return SingletonHolder.uniqueInstance; 
    } 
}

原文地址:https://www.cnblogs.com/surong/p/2439168.html