设计模式

设计模式的原则:
迪米特法则(最少知道原则)一个对象别的对象知道的越少越好。类间解耦
单一职责原则:一个方法就做一个事
接口隔离原则:多个接口隔离
里氏代换原则:子类继承父类,可扩展,但不改变父类原有的功能。

设计模式有哪些常见的?

一般为三类,创建型模式,结构型模式,行为型模式
创建型:不注重对象具体创建细节,简化代码结构,提高代码可重用性。
总结提供不同的方式来创建对象

结构型模式:结构型模式就像是搭建一个乐高模型的指南,帮助我们把不同的部分组合成一个完整的系统。通过使用这些模式,我们可以让代码更整洁、更灵活、更容易维护,从而提高整个系统的质量
总结就是组合零件,减少复杂,提高灵活,方便维护。

行为型模式:用于处理对象之间的交互和通信方式。

常问的:
创建型:单例模式;工厂模式
结构型:装饰者模式
行为型:观察者模式;策略模式;

什么是单例模式。确保一个类只有一个实例,并提供一个全局访问点。这意味着无论在系统中的哪个地方都只能有一个该类的实例存在。、
个人总结,创建对象类的时候,调用方法判断是否存在单例实例,如果存在就返回唯一实例,不存在就创建一个新的实例。
重点,确保只有一个实例。
特点:全局变量唯一性
优点:唯一性,延迟加载(需要时才创建实例,避免资源浪费)

双检锁能保证线程安全。

懒汉式单例模式的特点是在第一次调用获取实例的方法时才创建实例,而不是在类加载时就创建实例。
延迟加载:实例在第一次被使用时才会被创建,避免了不必要的对象创建。
但在多线程情况下,可能会创建多个。

饿汉式单例模式在类加载时就创建实例,可能会导致资源浪费,特别是在实例占用大量资源或需要延迟加载的情况下。
线程安全:由于实例在类加载时就创建,因此不会存在多线程环境下创建多个实例的问题。

在使用双重检查锁模式时,需要注意将实例变量声明为volatile,以确保多个线程能正确地处理实例变量的可见性。

双检锁模式特点
延迟加载:实例在第一次被使用时才会被创建,避免了不必要的对象创建。
线程安全:通过双重检查和加锁机制,避免了多线程环境下创建多个实例的问题。
提高性能:只有在实例为空时才会加锁进行创建,避免了每次获取实例都加锁的性能损耗。

什么是装饰者模式。

装饰者模式就像给一个对象穿上不同的外套,每个外套都可以给这个对象增加一些新的功能,但不改变这个对象的本质。这样,我们可以根据需要动态地为对象添加不同的功能,而不需要修改原始对象的代码。就像给一杯咖啡加不同的配料,可以制作出各种口味的咖啡一样。这就是装饰者模式的核心思想。

通过装饰者模式,我们可以动态地为对象添加新的功能,而不需要修改原始对象的结构。在这个例子中,通过装饰者模式,我们可以为圆形对象动态地添加红色边框的功能,而不需要修改 Circle 类的代码。这样就实现了功能的动态组合,同时保持了代码的灵活性和可扩展性,体现了装饰者模式的优势。

确保装饰者类和被装饰者类之间的接口一致性,以确保装饰者和被装饰者的替换性。

重点特点:灵活性和可扩展性。

什么是工厂模式
主要分为简单工厂、工厂方法、抽象工厂模式

简单工厂 :用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)
抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)

什么是简单工厂模式
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。
封装性好:客户端无需关心具体产品类的实例化过程,只需与工厂类交互。
扩展性强:如果需要增加新的产品类,只需要修改工厂类即可,符合开闭原则

什么是工厂方法
总的来说,工厂方法模式就是为每个具体产品类提供一个对应的工厂类,客户端通过与特定的工厂类交互来创建对应的产品对象,从而实现了对象的创建和使用的分离。

什么是抽象工厂
抽象工厂模式就是提供一个工厂,让你可以生产一系列相关的产品,而不用担心具体怎么生产的。这种模式让你可以轻松地切换不同系列的产品,而不用改变生产流程,就像在工厂里生产不同风格的家具一样。
上面说的太抽象了。看看这个
抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。

什么是观察者模式
观察者模式主要用于1对N的通知。当一个对象的状态变化时,他需要及时告知一系列对象,令他们做出相应。
我先说说什么是行为型模型。
就是注重对象之间的相互交互,解决系统运行时对象之间的通信和协作。

观察者模式,是一种行为性模型,又叫发布-订阅模式,他定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
这里包括主题接口,观察者接口,实现主题接口,实现观察者接口,

这里的运作就是
实现具体观察者接口来实现观察者接口。
通过调用具体实现主题的类,来成员变量里设定好观察者,继而在方法中update来唤醒和通知给观察者消息。
实现主题接口实现具体主题并且具备注册观察者的方法,移除观察者和唤醒更新观察者的方法 。
总结:
在具体主题的信息更新的时候,所有注册的观察者都会收到通知并且更新自己的状态。这就是实现了观察者模式。

什么是策略模式
选择不同的策略来实现不同的算法。
我觉得主要是为了 简化 if…else 所带来的复杂和难以维护。

优点 :
灵活性:可以动态地切换和使用不同的算法。
易扩展:可以轻松地添加新的策略,而不需要修改现有代码。

总结:系统运行时在不同情况选择不同的算法,灵活可扩展。避免使用大量的条件语句。

posted @ 2024-08-28 17:41  launch  阅读(74)  评论(0)    收藏  举报