<
设计模式
>
上一篇

缓存
下一篇

RPC框架之Thrift

## 设计模式:需要满足“开闭原则”—>不修改原来的代码下,扩展新功能

(1)一共有23种设计模式

1. 工厂模式:实例化对象的设计模式(分为三种:简单工厂模式、工厂方法模式、抽象工厂模式)

优点:

(1)要创建一个对象,只需要知道具体名称,就可以创建该对象了。

(2)扩展性高,如果要增加一个产品,增加一个扩展类就可以。

(3)屏蔽产品的具体实现,只需要关心产品的接口。

缺点:

(1)增加产品时,需要增加一个具体的实现类和对象实现工厂,使系统中的类增加较多,可能会增加系统的复杂度。同时也增加系统类使用的依赖感。

使用场景:

日志记录器、数据库访问

补充:

2.代理模式:给某对象提供一个代理对象,由代理对象管理当前对象的引用。代理模式可以看做是中介(自如、我爱我家等)。

如图: image

(1)使用代理模式的好处:

注意:真正的实现业务还是委托类去实现的。但是可以在实现真正的业务前后添加一些公共的服务。

例如给项目加缓存和日志,就可以在代理类里面实现,而不需要改动已经封装好的委托类。

(2)有多种代理,但若按照代理创建的时期分,代理模式分为两种:静态代理和动态代理

3.单利模式:保证一个类只有一个实例,提供公共的访问方法。

特点: (1)每个类只有一个实例

(2)必须自己创建这个唯一实例,即内部必须有一个私有构造方法

(3)必须给其他对象提供这个实例

例如:

懒汉式

  public class Singleton {
      /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
      private static Singleton instance = null;

      /* 私有构造方法,防止被实例化 */
      private Singleton() {}

      /* 1:懒汉式,静态工程方法,创建实例 */
      public static Singleton getInstance() {
          if (instance == null) {
              instance = new Singleton();
          }
          return instance;
      }
  }

调用:Singleton.getInstance().method();

优点:懒加载,需要用的时候才去加载,适合单线程操作。

缺点:线程不安全,多线程操作,不同步,如:频繁操作数据库时。

饿汉式

public class HungrySingle {

    //将本例私有化,防止在外面直接实例化该类
    private HungrySingle(){};

    //类一加载就创建,自己建一个静态方法,只能建一次
    private static HungrySingle hungrySingle = new HungrySingle();

    //提供一个公共方法,获取该实例
    public static HungrySingle getInstance(){
        return hungrySingle;
    }

}

优点:饿汉式不会出现问题

注意:通常

Top
Foot