一、单例模式
单例模式是一种常用的软件设计模式,定义是单例对象的类只能允许一个实例存在,该类负责创建自己的对象,同时确保只有单个对象被创建,相当于整个系统只需要拥有一个全局对象,这样有利于协调整个系统整体的行为,比如服务器中的某个配置文件信息存放在一个文件中,这些配置信息由一个单例对象统一获取,然后其他服务进程中的其他对象再通过这个单例对象获取这些配置信息,简化了在复杂环境下的配置管理。
Singleton类定义一个GetInstance操作,允许客户访问类的唯一实例,GetInstance是一个静态方法,主要负责创建自己唯一实例。
单例模式主要分为:饿汉单例模式、懒汉单例模式、双锁单例模式
应用场景
比如一个网站的计数器,一般采用单例模式实现,如果网站存在多个计数器,,每个用户的访问都刷新一次计数器的值,这样的话计数器的值是难以同步的,但单例模式就不会存在这类问题,而且还可以避免线程安全的问题。而在多线程的线程池中的设计一般也是采用的单例模式,这是因为线程池需要方便对线程池的池中的线程进行同样的控制,比如一些应用程序的日志应用,或者web中开发中读取配置文件都适合使用单例模式,例如httpApplication就是单例的典型应用。
适用场景:
1:需要生成唯一序列的环境
2:需要频繁实例化然后销毁的对象
3:创建对象时耗时过多或者消耗资源过多的,但又经常使用到的对象
4:方便资源互相通信的环境
————————————————
单例模式优缺点
优点:
在内存中只有一个对象,节省内存空间。
避免频繁的创建/销毁对象,可以提供性能。
避免对共享资源的多重占用,简化访问。
为整个系统提供一个安全的全局访问点。
缺点:
不适用变化频繁的对象。
使用单例模式的一些问题,比如数据库连接池对象设计单例模式,可能会导致共享连接池对象的程序过多而导致出现连接池溢出。
如果实例化后的对象长时间不被利用,系统会认为该对象是垃圾而被回收,这可能会导致对象的状态丢失。
二、工厂模式
工厂模式是创建型模式的一种,提供了一种创建对象的最佳方式,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展,是一种代替new操作的一种模式。
在工厂模式中,我们创建对象不会对客户端暴露创建逻辑,而是通过一个共同的接口来指向创建的新对象,比如我们创建一个工厂类,然后当创建者想船舰一个对象的时候只需要告诉工厂类即可,由工厂类去创建对象,调用者不需要知道如何创建的,也不用自己去创建。
工厂模式主要分为:简单工厂模式、工厂方法模式、抽象工厂模式,主要功能都是将对象的实例化部分抽离出来,目的是降低系统中代码耦合度,增强了系统拓展性。
简单工厂模式
简单工厂模式,顾名思义,就是一个实现比较简单的方式。简单工厂模式只是将不同对象的创建操作进行了 一层简单的封装,其实也就是把不同对象的创建操作逻辑全部单独放到一个类中,这个类就成为了简单工厂类,但我们需要一个对象的时候,只需要告诉这个简单工厂类,然后由这个简单工厂类根据我们的需要去创建对应的对象即可。