【设计模式】21-28:单例模式、桥接模式、命令模式、职责链模式、中介者模式、享元模式、解释器模式、访问者模式
二十一、单例模式
确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
public class SingleObject { //创建 SingleObject 的一个对象 private static SingleObject instance = new SingleObject(); //让构造函数为 private,这样该类就不会被实例化 private SingleObject(){} //获取唯一可用的对象 public static SingleObject getInstance(){ return instance; } public void showMessage(){ System.out.println("Hello World!"); } }
具有多种实现方式:
线程安全的懒汉式、线程不安全的懒汉式、饿汉式(上述例子)、双重校验锁(DCL,即 double-checked locking)、静态内部类、枚举
懒汉式:对象为空就实例化
线程安全:synchronized 修饰该方法
双重校验锁:volatile变量+synchronized
二十二、桥接模式
抽象部分与实现部分分离,使其可以独立变化
提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
使用场景:一个类存在两个独立变化的维度,且这两个维度都需要进行扩展
二十三、命令模式
请求以命令的形式包裹在对象中,并传给调用对象。
意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
public class CommandPatternDemo { public static void main(String[] args) { Stock abcStock = new Stock(); BuyStock buyStockOrder = new BuyStock(abcStock); SellStock sellStockOrder = new SellStock(abcStock); Broker broker = new Broker(); broker.takeOrder(buyStockOrder); broker.takeOrder(sellStockOrder); broker.placeOrders(); } }
二十四、职责链模式
多个对象都能处理请求
为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦
初始化设定级别,及对应的方法
通过级别编号进行方法的传递
二十五、中介者模式
该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
场景:多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。
二十六、享元模式
主要用于减少创建对象的数量,以减少内存占用和提高性能。
主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
应用实例: 1、JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。 2、数据库的数据池。
final HashMap<String, Shape> 存储不同颜色对应的圆
二十七、解释器模式
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
应用实例:编译器、运算表达式计算。
使用switch case根据传入字符串进行解析
二十八、访问者模式
使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15801271.html