一、单例模式(Singleton Pattern)
是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 简单理解:就是没有就创建,有就使用,有且仅有一个。 实现方法常用判断 常见应用场景 Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~
windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
网站的计数器,一般也是采用单例模式实现,否则难以同步。
应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
HttpApplication 也是单位例的典型应用。熟悉ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例。
单例模式应用的场景一般发现在以下条件下: 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。 控制资源的情况下,方便资源之间的互相通信。如线程池等。 观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 个人理解:类似于班主任,当需要侦听很多对象的时候,选择观察者模式,当你在玩手机的时候,班主任就会在后面窗口偷偷看着你,一旦发现就冲进来把手机没收,这里你玩手机就是一个触发侦听的行为,没收手机就是触发后执行的事件。每个同学玩手机都会被没收,所以在前面提到的弹幕实现就可以使用观察者模式,还有在Vue中的双向数据绑定使用的变形。 关于发布订阅模式我认为和观察者模式并非同一种模式,详解参考连接文章 发布订阅 发布
订阅
取消订阅
当状态发生改变的时候, 执行一段代码
例子: 买一本书
没有设计模式 => 去到书店, 有就买, 没有就走 => 过一会在来看, 有就买, 没有就走 => 过一会在来看, 有就买, 没有就走 => 过一会在来看, 有就买, 没有就走 => 过一会在来看, 有就买, 没有就走 发布订阅模式 => 去到书店, 有就买, 没有就把电话留给店员(订阅) => 等到店员给我打电话的时候, 去到书店, 买书(发布) => 店员给我打电话之前, 我从别的地方买到书了, 告诉店员一下, 你别管我了(取消订阅) 例子: 事件监听器
元素.addEventListener(‘click’, function (e) {}) 元素.addEventListener(‘click’, 函数2) 元素.addEventListener(‘click’, 函数3) 元素.addEventListener(‘mouseover’, 函数4) 元素.addEventListener(‘mouseover’, 函数5) 工厂模式
二、工厂模式(Factory Pattern)
是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 个人理解: 字面理解,工厂原材料放进去,产品送出来… 将参数带入,就会返回给我们一个想要的对象,每次都是新的. 使用场景: 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。