设计模式总结

好的程序特点:可维护性、可扩展性、可复用性、灵活性好。

简单工厂模式

不暴露创建对象的内部逻辑,使用工厂方法统一创建。

例子:比如一个父类animal,写几个子类比如pig,dog等继承父类,我们创建一个工厂类,创建生成对象方法,根据传入的name进行判断创建具体的子类,而外部无法知道创建的内部逻辑。

优点:隐藏对象创建的细节,提高系统的可扩展性,减少重复代码,便于维护。

工厂方法模式

创建对象的任务由专门的子类负责,而不是由主类直接创建对象。

例子:有一个运算工厂类,基础运算工厂类继承于他,现在需要新增高级运算,创建高级运算工厂类,在高级工厂类中通过传入的内容创建不同的运算对象。其实就是在扩展时通过新的工厂进行扩展功能,让类的实例化延迟到子类。

优点:符合开闭原则,增加系统的灵活性,易于扩展。

策略模式

定义了一系列算法,他们可相互替换,不会影响到使用的客户。

例子:创建父类算法类,创建子类算法1、算法2等继承父类,重写算法方法,使用类通过构造方法参数来创建算法类传给成员变量,在使用类的方法里,调用成员变量(即对应算法对象)的算法方法。

优点:支持开闭原则,解耦合,代码复用。

单一职责原则

一个类应该只有一个引起它变化的原因。

优点:提高代码的可读性和可维护性,促进代码复用,减少依赖关系,降低类的复杂度。

开闭原则

对修改关闭,对扩展开放。

优点:可维护性,可扩展性,可复用性,灵活性好。

依赖倒转原则

高层模块不应该依赖低层模块,两者都应该依赖抽象。

抽象不应该依赖细节,细节应该依赖抽象

优点:降低耦合度,可扩展性,灵活性好。

里氏代换原则

子类型必须能替换掉他们的父类,型,而不会影响程序的正确性。

优点:降低系统的复杂度,可扩展性,可复用性。

装饰模式

用于在不修改对象自身的情况下,动态地给对象添加新的功能或行为。

例子:父类为人,有吃东西方法,子类1重写父类吃东西为吃饭,子类2重写父类吃东西为吃菜,两子类在重写吃东西方法前先调用super.吃东西()方法。在Main方法中,创建父类实例,作为参数传给子类1,子类1创建实例作为参数传给子类2,传入的参数为父类,故如果要新增一个吃肉即只需继承父类创建子类3,重写吃东西方法,将子类2对象传给子类3。(形成一个调用链)

优点:可扩展性,灵活性好,符合开闭原则。

代理模式

通过一个代理对象来间接访问目标对象,可以在不改变目标对象的前提下,增加额外的功能或控制访问权限。

例子:代理类创建追求者,并通过构造方法参数将被追求者传入,在代理类的方法中,执行追求者对象的方法。

优点:增加功能,控制访问,控制访问。

原型模式

通过复制现有对象来创建新的对象,而不是通过传统的构造函数来创建。

例子:某个类实现Cloneable接口,创建复制方法,里面通过super.clone()方法来复制该类型对象,并通过方法返回,在之后的调用我们就可以直接通过实例化的对象直接调用该方法创建新对象。

优点:减少对象创建的开销,符合开闭原则,增加灵活性。

模板方法模式

定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法模式通过在抽象类中定义一个模板方法来实现这一点,模板方法调用了一些抽象方法,这些抽象方法在子类中实现。

例子:定义一个试卷类,有三个方法展示选择题放在父抽象类,定义三个抽象方法,在具体小明继承抽象类实现抽象方法,即小明的选择。

优点:行为内聚,扩展性好,遵循开闭原则。

迪米特法则

一个对象应该尽可能少地了解其他对象的内部结构。在类设计上,应尽量降低成员访问权限。

优点:降低耦合度,提高可维护性,提高可扩展性。

外观模式

它提供了一个统一的接口来访问子系统中的一组功能。通过外观模式,客户端可以使用一个简单的接口来访问复杂的子系统,而不需要了解子系统的内部结构和复杂性。

例子:定义一个基金类, 里面有各种买股票方法,我们只要在客户使用直接调用其具体方法,而无需知道其内部细节。

优点:简化客户端的使用,降低耦合度,更好的层次结构。

建造者模式

将复杂的对象的构建与它的表示分离,使得同样的过程可以创建不同的表示。

例子:产品类由多个部件构成,定义抽象建造者类抽象方法,具体建造者类,实现抽象方法,完成不同部件具体实现,和产品类返回,在指挥者类将调用具体建造者创建产品各个部件。

优点:解耦客户端和产品,支持多种表示,封装性好,扩展性好。

观察者模式

它定义了对象之间的一对多依赖关系,当被观察者发生变化时,所有依赖它的观察者会得到通知自动更新。

例子:定义一个下班时间time为100,当time减少到0时,便通知公司所有人(list)下班。

优点:支持广播通信,低耦合,扩展性好。

抽象工厂模式

提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

例子:如果是一个抽象工厂接口,那么里面应包含所有产品创建的抽象方法。

优点:隔离具体类,易于交换产品系列,支持开闭原则。

相关推荐
暴躁哥4 小时前
深入理解设计模式:工厂模式、单例模式
单例模式·设计模式·建造者模式·工厂模式
xosg4 小时前
嵌入式<style>设计模式
设计模式
清霜之辰5 小时前
安卓开发用到的设计模式(2)结构型模式
android·设计模式·结构型设计模式
总是难免6 小时前
设计模式 - 模板方法模式
java·设计模式·模板方法模式
琢磨先生David9 小时前
《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》
java·设计模式
沐土Arvin10 小时前
Web 安全进阶:前端信封加解密技术详解
前端·javascript·安全·设计模式
zizisuo13 小时前
Java集合框架深度剖析:结构、并发与设计模式全解析
java·javascript·数据结构·设计模式
YGGP14 小时前
【创造型模式】抽象工厂方法模式
设计模式
YGGP14 小时前
【创造型模式】工厂方法模式
设计模式