设计模式初学

来源:互联网 发布:漫威宇宙实力排行知乎 编辑:程序博客网 时间:2024/05/01 02:40

单例模式

  • 本质:确保类的实例化对象有且仅有一个
  • 应用:配置文件、日志、缓存、线程池等
  • 优点:避免过多占用资源或者数据同步问题
  • 分类

    • 饿汉模式:静态化实例跟随类一同加载,无论是否在外部创建实例
      step1:实例由构造方法创建,故改写构造方法(public -> private)
      确保外部不能随意调用
      step2:创建用于返回的私有静态实例,静态确保了唯一性
      step3:返回实例的getInstance( )方法

    • 懒汉模式:只是声明静态实例,只有当用户获取时才判断并创建实例
      step1:构造方法私有化
      step2:声明类的唯一实例
      step3:获取实例方法

  • 区别
    是否在内部进行实例化

工厂模式

  • 目的:实现对象间的低耦合
  • 特点
    对象的创建由工厂负责
    客户类产品成员面向接口,通过多态获取各工厂的产品
    可以按照需求指定特定工厂来生产产品
  • 技术支持
    反射,class Properties/File.properties
  • 简单工厂模式
    所有的产品均由一个工厂生产,根据客户端要求生产出特定的产品,其缺点就是大大增加了工厂类的负担
class Factory{    public Product getProduct1(){        return new Product1();    }    public Product getProduct2(){        return new Product2();    }}
  • 抽象工厂模式
    1. 产品:接口派生出各类产品
      eg : class Product1 implements Product
      class Product2 implements Product
    2. 工厂:接口派生出用于生产各类产品的工厂
interface ProductFactory{    public Product getProduct();}class Product1Factory implements ProductFactory{    @override    public Product getProduct(){        return new Product1();    }}class Product1Factory implements ProductFactory{    @override    public Product getProduct(){        return new Product2();    }}

3.客户:创建工厂获得产品
eg:Product p = Product1Factory.getProduct( );

观察者模式

  • 使用场景:
    对象间存在依赖关系(理解成星型依赖)当 中心变化时需要其余周围对象及时更新自己。最近学习MQTT协议感觉观察者模式比较适用。

  • 使用方法:
    观察者:

    //更新方法:public void update()

    被观察者:

      //维护一个观察者列表  private List<Watcher> watcherList = new ArrayList<Watcher>();   //添加观察者方法  public void addWatcher(Watcher watcher);  //删除观察者方法  public void delWatcher(Watcher watcher);  //通知观察者方法  public void notifyWatchers();
  • 推拉方式
    推方式:被观察者维护一个自己的状态(可以考虑JavaBean),当状态发生改变时主动将状态发送给观察者。适用于被观察者比较复杂,观察者必须获得一些信息的情况。
    拉模式:观察者主动从被观察者处获得状态,只是被观察者需要提供一个状态获取接口。
1 0
原创粉丝点击