![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 51
糊口度日的小白
这个作者很懒,什么都没留下…
展开
-
23种设计模式GOF
设计模式六大原则单一职责原则一个类只负责一个功能领域中的相应职责也就是一个类该干啥就干啥别把不相关的也放到该类中迪米特法则(最少知道原则)概念:一个软件实体应当尽可能少地与其他实体发生相互作用实际上就是 降低类与类之间的耦合 甲乙双方不需要直接接触的话尽量使用第三方去接触甲方和乙方依赖倒转原则高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。遵循java中多态的特性合成复用原则尽量使用合成/聚合的方式原创 2021-04-19 01:05:55 · 184 阅读 · 0 评论 -
访问者模式
提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。不同的用户可以对该集合对转载 2021-04-19 00:53:13 · 134 阅读 · 0 评论 -
模板方法模式
概念:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗点就是 说在父类中定义一些通用方法,然后其他一些独特方法交给子类去实现。(前提是该场景适用模板模式)如下:在软件开发中,有时也会遇到类似的情况,某个方法的实现需要多个步骤(类似“请客”),**其中有些步骤是固定的(类似“点单”和“买单”),而有些步骤并不固定,存在可变性(类似“吃东西”)。为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式转载 2021-04-11 22:17:16 · 121 阅读 · 0 评论 -
策略模式
概念:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。通俗点说就是定义一个抽象类或者接口 。让子类去做实现,不同的类具有不同的功能,但方法名称是一样的// 在使用策略模式时,我们需要将算法从Context类中提取出来,//首先应该创建一个抽象策略类,其典型代码如下所示: abstract class AbstractStrategy { public abstract v转载 2021-04-11 20:38:39 · 194 阅读 · 0 评论 -
桥接模式
概念:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式比如有俩种笔(毛笔和画笔),各有大中小三种型号,给他们搭配6种颜色,画笔的话就需要3*6=18支,而毛笔的话就只需要三种笔和6个画盒一共9个对象。通过分析我们可以得知:在蜡笔中,颜色和型号两个不同的变化维度(即两个不同的变化原因)融合在一起,无论是对颜色进行扩展还是对型号进行扩展都势必会影响另一个维度;但在毛笔中,颜色和型号实现了分离,增加转载 2021-04-09 13:00:18 · 98 阅读 · 0 评论 -
外观模式
概念:为子系统的一组接口提供一个统一的入口。又称为门面模式外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。包含俩个角色外观角色客户端请求的入口,可以将客户端发起的任意请求转发到对应的子系统中去子系统角色处理由外观类传过来的请求;子系统并不知道外观的存在,对于子系统而言,外观角色仅仅是另外一个客户端而已。在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;每一个子转载 2021-04-07 00:17:58 · 74 阅读 · 0 评论 -
代理模式
概念:当无法直接访问一个对象或者直接访问一个对象比较困难时就需要运用代理模式目标接口(下面俩个类共同的接口)代理类目标类分类远程代理 :为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又称为大使缓存代理为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。虚拟代理如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。保护代理控制对一个转载 2021-04-06 00:20:18 · 97 阅读 · 0 评论 -
装饰器模式
概念:(增加对象的一些功能)动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。Component(抽象构件):它是具体构件和抽象装饰类的共同父类ConcreteComponent(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法)。Decorator(抽象装饰类):它也是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现。它维护一个指向抽象构转载 2021-04-05 18:48:21 · 83 阅读 · 0 评论 -
适配器模式
概念:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。也就是原有的接口或者类满足不了新的功能需求,但是不能改动原有的代码,只能在原有的基础上进行拓展,而这时候就需要适配器的进入。适配器的种类类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同,对象适配器模式中适配器和适配者之间是关联关系,而类适配器模式中适配器和适配者是继承关系对象适配器: 对适配者的引入(包含)转载 2021-04-05 01:26:14 · 89 阅读 · 0 评论 -
原型模式
概念:就是对对象的拷贝浅拷贝:数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型深拷贝:引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制java自带一种克隆模式 不过那种克隆是属于浅拷贝(实现cloneable接口)当使用java中覆盖object中的clone方法时,其中引用对象复制的是地址(也就是说地址值和复制之前的一样,然后指向同一个对象),而不是new一个新的地址转载 2021-04-04 00:39:21 · 159 阅读 · 0 评论 -
建造者模式
概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。也就是说将各个不同的零件拼凑组成一个整体,比如某个工厂造汽车,他不需要去别的工厂去找轮胎,倒车镜,方向盘等等,自己就能造出一辆完整的一个汽车。与抽象工厂的区别就是 抽象工厂造的是不同的产品,而产品的零件组成却不是自己工厂都能完成的比如海尔虽然是造冰箱的但冰箱的门也许是三星造的。还不懂就去专门看看抽象工厂的概念组成:在这样的设计模式中,有以下几个角色:1、Builder:为创建一个产品对象的各个部件指定抽象接口。2、转载 2021-04-02 00:30:50 · 61 阅读 · 0 评论 -
抽象工厂模式
不喜勿喷 ,望理解概念:是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。意图:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。使用场景:比如海尔厂家不仅卖洗衣机还卖电脑,还有电视。然后三星也卖洗衣机 电脑和电视,也就是所说的产品族和工厂模式相比工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。demointerface Factory {TV get();wash get();computer get();}class haierFa原创 2021-03-31 23:24:04 · 61 阅读 · 0 评论 -
工厂方法模式
概念:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。场景:接口选择的问题,比如数据库的切换(当不知道选择哪类数据库时,可以交给子类去实现)下面这个demo正好遵循设计模式的开闭原则demo:interface Database{public void run();}class Mysql impliments Database{public void run(){sout(“选用mysql”);}}class Orcle imp原创 2021-03-31 22:47:44 · 85 阅读 · 0 评论 -
中介者模式
概念:就是相当于一个注册中心,如聊天室中各个用户聊天的消息都可以通过该注册中心将消息发到聊天室。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。...转载 2021-03-26 00:11:18 · 72 阅读 · 0 评论 -
备忘录模式
概念:顾名思义就是用来备份存档的书面意思是指:是行为型模式设计模式之一,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护被保存的这些对象状态的完整性以及内部实现不向外暴露。结构:发起人(Originator) 用来创建备忘录和恢复备忘录备忘录(Memento) 用于存储 Originator 的内部状态,并且只能被 Originator 对象访问 。负责人(Caretaker)用来存储备忘录和获取备忘录备转载 2021-03-24 22:23:02 · 79 阅读 · 0 评论 -
解释器模式
概念:这种模式实现了一个表达式接口该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。听名字就应该明白这是对某个对象或数据进行做出解释或者结果处理1.定义一个表达式接口public interface Expression {public boolean interpret(String context);}2. 实现表达式接口public class TerminalExpression implements Expression {private String d转载 2021-03-21 18:52:43 · 76 阅读 · 0 评论 -
状态模式
概念:对象的状态发生改变的时候,行为也跟着相应的改变package state;/** 一种状态对应一种行为对应一个具体状态类首先 要知道有三种角色充当 抽象状态角色 环境角色 具体状态角色抽象状态角色 包含 一个内置环境角色 和多个抽象行为(要执行的方法)环境角色 包含一个内置抽象状态角色 多个具体状态类成员变量 多个执行行为具体角色 实现父类的方法(一个是自己该状态下要做的事 还有别的方法就是状态的切换)@Classname StateClassDemo2原创 2021-03-21 18:22:22 · 82 阅读 · 0 评论 -
命令模式
概念:将请求封装成一个对象,然后通过不同的调用者去执行请求对象中不同的方法。组成:命令接口、不同命令接口的实现类(执行者)、封装的对象请求类、调用对象类(接收者)应用场景:1.认为是命令的地方都可以使用命令模式(其实说的挺广泛的,本人觉得这个模式不怎么好,看起来是有些逻辑性但是吧太冗余,虽然解耦了,也许是我还没有理解透彻)2.比如javase中的桌面程序就可以当成一个个的命令一个简单的例子 对俩个数求和求减关键代码:1. 定义一个接口(命令接口)interface Order{publ转载 2021-03-18 15:52:51 · 82 阅读 · 0 评论 -
责任链模式
概念:为请求者创建了一个处理链,按序对该请求进行处理,在执行这条链的时候,可以选择是否继续向下执行或者直接返回(对一个进行进行多种规则的处理)这种模式我觉得在实际 场景中应用比较少 他的关键点在于提供对后续处理者的引用优点:1、降低耦合度。它将请求的发送者和接收者解耦。2、简化了对象。使得对象不需要知道链的结构。3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。4、增加新的请求处理类很方便。案例:对字符窜的处理1.public abstra原创 2021-03-17 17:54:03 · 115 阅读 · 0 评论 -
迭代子模式
概念:又称“游标模式”,可以顺序的访问一个聚集中的元素,而不必暴露聚集中的内部结构特点:对外使用简单,可以使用户透明的访问聚集中元素,对内进行结构封装不必暴露给用户聚集:指的是对元素封装的一个容器,可以容纳各种类型的对象(如iterator接口)Java聚集(Collection)对象是实现了共同的java.util.Collection接口的对象(聚集对象是能够容纳一组对象的容器对象)聚集对象提供的方法:增删改查(如Arraylist)白箱聚集:粗俗点说 就是接口对外暴露,聚集对象实例和迭代子对转载 2021-03-17 15:40:22 · 118 阅读 · 0 评论 -
单例模式
概念:指的是项目中只有一个该类的实例。应用场景:1.需要频繁创建的一些类(项目中需要大量的该类),使用单例可以降低系统的内存压力,减少 GC2.某类只要求生成一个对象的时候3.某些类创建实例时占用资源较多,或实例化耗时较长,且经常使用方式1:懒汉式public class Singleton {private static Singleton instance;private Singleton (){}public static Singleton getInstance() {转载 2021-03-15 00:39:34 · 90 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
概念:减少创建对象的数量,以减少内存占用和提高性能。 属于结构型模式何时使用:1.系统中有大量对象2.这些对象可以被一个对象代替使用。3.系统中这些对象是不可分辨的4.对象的状态属性大部分可以外部化创建一个能代表大部分类的一个类public class Line {private String name;private int x1;private int y1;private int x2;private int y2;public void draw(){System.转载 2021-02-24 13:16:03 · 77 阅读 · 0 评论 -
组合模式(composite)
概念:是用于把一组相似的对象当作一个单一的对象。组合模式依据***树形结构***来组合对象用来表示部分以及整体层次。 属于结构型模式 多用于递归树状实体public class Employee {private int age;private String name;private String dept;private List employeeList=new ArrayList<>(); public Employee(int age, String nam转载 2021-02-23 18:00:51 · 73 阅读 · 0 评论 -
简单工厂模式
概念:客户端通过给工厂中传入不同的参数值来实例化不同的对象,执行对应的方法。结构图定义一个shape接口public class shape{void draw();}定义一个实现类public class line implements shape{public void draw(){sout(“画条线----line”);}}public class circle implements shape{public void draw(){sout(“画个○----圆”);转载 2021-02-20 10:27:28 · 58 阅读 · 0 评论 -
观察者模式
观察者模式概念:当一个对象状态发生改变的时候,所有依赖他的对象都被得到通知并自动更新实例:比如在拍卖的时候,拍卖师发现最高价,并通知给其他拍卖商观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。...转载 2021-02-20 00:34:57 · 111 阅读 · 0 评论