常用设计模式

server/2024/11/13 5:31:58/

设计模式分三种:创建型、结构型、行为型

1、简单工厂模式、工厂模式、抽象工厂模式

简单工厂:工厂-》产品
工厂:抽象工厂-》工厂1-》产品1
-》工厂2-》产品2
抽象工厂:抽象工厂-》工厂1-》抽象产品-》产品1/产品2

2、建造者模式

创建型模式
结构:
抽象建造者:abstract class ActorBuilder
具体建造者:HeroBuilder extends ActorBuilder、DevilBuilder
产品:Actor游戏角色类,充当产品
指挥者:ActorController 角色控制器,在这里调用具体建造者的方法。

优点:每个建造者相对独立,方便添加/替换,且调用者不必直到产品内部组成的细节,将产品本身和产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象

缺点:如果产品的内部变化复杂,可能需要定义很多具体的建造者来实现这种变化,会导致系统变得很庞大
建造者模式的产品需要有较多共同点,组成部分相似,使用范围受到限制

3、单例模式

创建型模式
确保一个类只有一个实例,供全局访问

饿汉式、懒汉式(双重检查锁,synchronized+volatile

优点:节约系统资源、
缺点:不可扩展

4、适配器模式

5、代理模式

6、责任链模式

行为型模式
结构:
Handler抽象处理者
concreteHandler 具体处理者

上家会在自己的代码里维持对下家的引用

优点:在系统中增加一个新的具体处理者无需修改原有系统的代码,只需要修改链条即可,符合开闭原则

缺点:如果建链不当,可能出现循环调用,

7、观察者模式

对象和对象之间的依赖关系,一个对象发生改变时,自动通知其他对象
也可以叫发布-订阅者模式
Event、Listener、Publisher

优点:
可以解耦,简化一对多的难度
缺点:
如果观察者很多,一个个通知可能很浪费时间,

8、策略模式

通过继承和多态,
让每个算法之间可以互相替换,
Context环境类
Strategy抽象策略类
ConcreteStrategy:具体策略类

优点:
避免多重if-else
可以灵活地增加新的策略/算法

缺点:
调用者必须直到所有的策略类,并自行决定使用哪个策略

9、模板方法模式

定义一个操作中算法的框架,将一些步骤的实现放到子类中。

优点:代码复用
反向控制,可以通过子类覆盖父类的钩子方法来决定是否执行某一步骤
更新/增加新的子类很方便

其他:桥接模式、组合模式、装饰模式、外观模式、享元模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、状态模式、访问者模式


http://www.ppmy.cn/server/40203.html

相关文章

什么是IP跳变?

IP 跳跃(也称为 IP 跳动)的概念已引起使用代理访问网站的用户的极大关注。但 IP 跳跃到底是什么?为什么它对于各种在线活动至关重要? 在本文中,我们将深入探讨 IP 跳跃的世界,探索其实际应用、用例、潜在问…

【Python单点知识】类成员汇总讲解——包含类方法、静态方法、私有成员说明

文章目录 0. 前言1. 属性(Attributes)1.1 类属性(Class Attributes)1.2 实例属性(Instance Attributes) 2. 方法(Methods)2.1 实例方法(Instance Methods)2.2…

如何在Mac 电脑上安装 Homebrew

1、打开终端应用程序 在终端中输入以下命令并回车: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 这个命令会自动下载并运行 Homebrew 的安装脚本。 系统可能会提示您输入管理员密码,请输入您的 Mac 登录…

Vivado功耗之散热模型详解

目录 一、前言 二、热模型 三、结温计算 四、散热器计算 五、参考资料 一、前言 ​在功耗评估中,Vivado中report power流程以及XPE中都有关于environment的配置,该界面配置涉及到多个晦涩的概念,之前的文章中也对相关概念进行过翻译&…

第十二篇:数据库系统导论 - 探索数据管理的基石

数据库系统导论 - 探索数据管理的基石 1 引言 数据的力量:揭秘数据库系统的核心 在信息时代,数据无处不在,它们成为了企业和社会运作的基础。我们如何储存、检索、更新和维护这些数据,决定了我们能否从这些数据中获得力量。数据…

CSS-盒子模型元素溢出

作用&#xff1a;控制溢出的元素的内容的显示方式 属性&#xff1a;overflow 属性值 属性值效果hidden溢出隐藏scroll溢出滚动&#xff08;无论是否溢出&#xff0c;都显示滚动条位置&#xff09;auto溢出滚动&#xff08;溢出才显示滚动条位置&#xff09; <!DOCTYPE html&…

3D 生成重建009-DreamGaussian使用gaussian splatting在两分钟内生成3d

3D 生成重建009-DreamGaussian使用gaussian splatting在两分钟内生成3d 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 DreamGaussian是第一个使用gaussian splatting方法进行3d生成的工作。论文最先使用gaussian splatting替代原来用nerf表示3d。整体架构依然保留了原来的…

北京市小学电子教材

Unit 1 What time is it?-北京版二年级下册英语电子课本 https://www.sohu.com/a/613549691_121290829