设计模式详解

设计模式

1.简单工厂模式

构建一个工厂类,根据参数来创建不同的需求类,被创建的类通常具有公共的父类。将对象的创建与使用分离开来,但,新增一个产品就要改变代码添加一个分支,违反了开闭原则。

2、策略模式

将一系列同类型但不同的需求的目标分别创建不同的类(算法),类似余工厂模式创建不同对象。

创建环境类,通过传入的需求(环境)调用需要类(算法)

  1. 定义一个策略接口,声明算法的抽象方法。(同类型)
  2. 创建具体的策略类,实现策略接口,封装具体的算法。(不同需求)
  3. 创建环境类,包含对策略接口的引用,以及一个用于设置具体策略对象的方法。
  4. 在客户端中创建环境类的对象,并调用其方法来执行具体的算法。
    但,需要客户端知道所有的策略类,并传入需要的环境。

3、备忘录模式

我们很多会用到,类似于一种实现或者机制。 ​ 像我们常用的回退啊,事务的回滚啊等

4、代理模式

在访问某个类或者对象时,我们不能直接访问或者要对目标做出某些变更,但不能直接修改年目标,我们可以采用代理模式。

建立一个抽象类,目标类实现抽象类,代理同样实现抽象类。在调用目标累时先进过代理类,在代理类中我们可以在相同的方法中,调用目标类的方法在调用前后进行我们的优化改变。 ​ 像我们常用的动态代理等

复制代码
Client → Subject ← RealSubject  
           ↑  
           │  
        Proxy

代理模式应用

(1)远程代理

一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

(2)虚拟代理

根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象,这样就可以达到性能的最优化。比如说你打开一个很大的HTML网页时,里面可能有很多的文字和图片,但你还是可以很快打开它,此时你所看到的是所有的文字,但图片却是一张一张地下载后才能看到。那些未打开的图片框,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。

(3)安全代理

用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。

(4)智能指引

是指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。它们都是通过代理在访问一个对象时附加一些内务处理。

5、单例模式

​ 单例模式保证只有一个实例

​ 通过private一个静态变量用来判断实例是否存在,并且private构造方法,用来防止外部实例化。留有一个暴露点,通过判断这个 private静态变量 来决定是否创建新实例还是返回已有实例

复制代码
public class Singleton {
    // 私有静态变量,保存唯一实例
    private static Singleton instance = null;

    // 私有构造函数,防止外部 new
    private Singleton() {}

    // 公共静态方法,提供全局访问点
    public static Singleton getInstance() {
        if (instance == null) {  // 判断是否已有实例
            instance = new Singleton();
        }
        return instance;
    }
}

6、访问者模式

​ 类的结构是稳定的。想要执行不同的操作。

​ 定义访问者接口,构建统一方法重载这个方法,表示对不同部分的不同操作。实现具体的访问者接口,每个接口实现不同的操作

​ 定义元素接口,表示类的不同部分,实现具体的元素接口,调用访问者接口,插入自己(不同的部分),访问者根据传入不同部分调用不同的实现。

7、观察者模式

​ 被观察的对象称为主题,当主题改变时通知所有观察者

​ 定义一个主题接口,实现这个主题为学要观察的对象,当改变时通知观察者

​ 定义一个观察者接口,实现这个观察者,穿件变更方法

​ 客户端代码中创建主题对象和观察者对象,注册观察者到主题中,然后通过主题改变状态,观察者得到通知并进行更新。

8、装饰模式

​ 定义一个接口,实现这个接口1,当我们刚想增强这个接口1但不能直接操作接口1时,通过实现接口2,在接口二中引入接口1,调用接口一并在之后做出增强逻辑。

复制代码
Client → Component ← ConcreteComponent
           ↑
           │
      Decorator ← ConcreteDecoratorA, ConcreteDecoratorB
相关推荐
Code_Geo8 小时前
agent设计模式:第一章节—提示链
microsoft·设计模式·agent·模型
懂得节能嘛.11 小时前
【设计模式】Java规则树重构复杂业务逻辑
java·开发语言·设计模式
tan77º11 小时前
【项目】基于多设计模式下的同步&异步日志系统 - 项目介绍与前置知识
linux·c++·设计模式
Query*1 天前
Java 设计模式——工厂模式:从原理到实战的系统指南
java·python·设计模式
庸了个白1 天前
一种面向 AIoT 定制化场景的服务架构设计方案
mqtt·设计模式·系统架构·aiot·物联网平台·动态配置·解耦设计
Meteors.1 天前
23种设计模式——访问者模式 (Visitor Pattern)
设计模式·访问者模式
Vallelonga1 天前
Rust 设计模式 Marker Trait + Blanket Implementation
开发语言·设计模式·rust
en-route1 天前
设计模式的底层原理——解耦
设计模式
杯莫停丶1 天前
设计模式之:工厂方法模式
设计模式·工厂方法模式