首页 > 其他分享 >设计模式

设计模式

时间:2023-02-08 16:44:41浏览次数:34  
标签:例如 状态 对象 创建 模式 工厂 设计模式


一.设计模式分为

1.创建型模式
2.结构型模式
3.行为型模式

二. 创建型模式
1.简单工厂(工厂方法)模式:
隐藏创建对象的细节,在使用时才选择创建哪个对象(建议使用反射);就是一个类专门用来生成对象,复杂对象可以使用,简单对象建议直接new
2.抽象工厂模式:
创建一个生成具体工厂的返回抽象工厂方法,不常用; 就是生成简单工厂的一个抽象工厂类,生成工厂的工厂,用于超级复杂的情况。
3.单例模式:
分为饿汉与懒汉,其中懒汉需要进行线程安全处理,双枷锁,静态内部类。创建jdbc等大对象的时候需要使用该模式
4.建造者模式:
创建一个对象,基本组件不会变,组合经常变化。不常用,例如去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。或者类似StringBuilder
5.原型模式:
首先创建一个对象,再使用clone的方式创建其他的对象,不常用,实现克隆操作,在 JAVA 继承 Cloneable,重写 clone(),浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流

三.结构型模式
1.适配器模式:
在一个类中想增加另外多个类的功能(继承同一个父类),增加一个适配器来统一处理;
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口,例如一个client FcRequestAdapter
例如需要调用一个类中的方法,但是该方法参数不适用,三种解决方案: 1.修改原类方法 2.在原类中新增方法 3.新增适配器类
理解springboot中适配器的相关应用
2.桥接模式:
使用聚合而非继承,例如手机品牌与手机软件两者是聚合的关系。两个抽象类之间的连线就是一座桥。
3.装饰器模式:
动态地给一个对象增加额外的功能,比生成子类更佳灵活。 可以根据需要有选择,有顺序的包装所装饰的对象。
4.代理模式:
代理模式就是在访问对象时引入一定程度的间接性,可以附加多种用途。远程代理(webService远程调用),虚拟代理(创建大对象),安全代理,智能指引。
5.外观模式:
如果子类太多太复杂,可以抽出一个外观类统一处理,就如同购买基金,由基金经理处理多个股票。
6.组合模式:
需求是一个树形结构,整体是由部分组成,并且整体与部分的结构相似,可以用组合模式,例如公司与子公司都有财务部与人力资源部。
7.享元模式:
主要用于减少创建对象的数量,以减少内存占用和提高性能。我们把其中共同的部分抽象出来,直接返回在内存中已有的对象,避免重新创建,例如围棋游戏中的棋子(内部状态为棋子颜色,外部状态为棋子位置)。

四.行为型模式
1.策略模式:
根据算法不同,采用不同的策略。策略模式与简单工厂模式结合使用,效果更佳。例如:商场打折不同的方案,可以看做不同的策略。例如影院租碟,根据电影类别(状态,使用枚举与反射)计算价格与积分。
2.模板方法模式:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。把子类中重复的代码搬到父类中,减少代码重复。
3.状态模式:
状态模式是解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的(状态不要超过5个)
一系列类当中,(使用工厂获取当前状态对象)糖果机例子,工作步骤是固定的,状态是变化的,有可能增加状态。
4.备忘录模式:
保存一个对象的某个状态,以便在适当的时候恢复对象。例如在游戏中打boss前存档,万一失败就读档重新开始。
5.迭代器模式:
提供一种方法顺序遍历对象中元素,又不暴露该对象的内部表示,例如list的Iterator
6.命令模式:
把请求一个操作的对象与执行操作的对象分开,可以支持撤销/恢复操作,另外维护一个命令列表,生成所有命令后再一起执行,例如饭店下单(菜单就是命令)与厨师做菜,可以撤销命令
7.责任链模式:
是多个对象都有机会处理请求,从而避免请求发送者与处理者的耦合关系,将这些对象连成一个链,并沿着这条链传递请求,直到有对象处理为止。例如申请加薪或请假流程审批。
8.中介者模式:
用一个中介对象来封装一些列的对象交互,使其不用显示地互相引用,使结构又网状变为以中介者为中心的星状结构,例如联合国安理会与各成员国。
9.解释器模式:
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子,例如正则表达式
10.访问者模式:
对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作,例如男人女人(性别只有2种是不变的)成功,失败,结婚的各种操作
11.观察者模式:
又称为发布,订阅模式,被观察者保存一个通知列表,当需要通知时,遍历发送通知

 

标签:例如,状态,对象,创建,模式,工厂,设计模式
From: https://www.cnblogs.com/lk-tony/p/17102392.html

相关文章

  • 常用设计模式 每一个demo 和每一个大或者小的项目, 想写好代码,都会用到
    设计原则①单一职责原则(SRP)使函数或对象功能尽量单一,应该把对象或方法划分成较小的粒度②最少知识原则(LKP)自我理解:最少知识指最少地知道认识;简而言之就是尽量降低方法或模......
  • 谈谈我工作中的23个设计模式
    作者:闵大为(天未)序从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后,为了加深理解,对相关图片进行......
  • 软件设计模式
    有人说设计模式大致总结为23种,有人说29种,各式各样。我们讨论的不限于23种,关键掌握的是一些常用的设计模式。编程时一种技术,更加是一门艺术。不能只满足于写完代码运行结果正......
  • 设计模式-建造者模式
    建造者模式builderModle.h#pragmaonce#include<iostream>#include<string>usingnamespacestd;classPhone{public: Phone(){} ~Phone(){} voidsetB......
  • 设计模式-单例模式
    简易单例模型easysiglemodle.h#ifndefEASYSIGLEMODLE_H#defineEASYSIGLEMODLE_H#include<iostream>usingnamespacestd;classEasySingleModle{public:......
  • 设计模式-工厂模式/抽象工厂模式
    工厂模式#include<iostream>#include<string>usingnamespacestd;classShape{public: virtualvoiddraw()=0;};classRectangle:publicShape{pub......
  • 搞懂设计模式——代理模式 + 原理分析
    作者:京东零售秦浩然引子举个栗子,众所周知,我们是可以在京东上购买机票的。但机票是航司提供的,我们本质上是代理销售而已。那为什么航司要让我们代理销售呢?我们又是如帮他做......
  • 设计模式-策略模式升级(服务定位器模式)
    设计模式-策略模式(服务定位器模式)前言:正文开始前先抛出一个问题,项目开发中如果让你设计支付模块,目前有支付宝、微信、各大银行的部分,你会如何设计支付这块的代码?在调用的......
  • 事件驱动及其设计模式
    在GUI编程中,事件是非常常见的。比如,用户在界面点击了按钮,就会发送一个“点击”事件,而相应的会有一个处理“点击”事件的事件处理器会来处理该事件。因此,所谓事件驱动,简单地......
  • Spring设计模式 & Spring Security & Spring Jpa
    ......