
23种设计模式
文章平均质量分 60
春风霓裳
加油(ง •̀_•́)ง
展开
-
单例模式--解决多线程并发问题
1、final的作用:防止子类不适当的重写父类中的方法,破坏单例模式2、私有的构造方法,只能类内第哦啊用,但是私有不能防止反射来创建新的实例3、防止多线程并发访问问题:懒汉和饿汉有所不同饿汉式:静态变量的初始化,时在类加载过程(类加载只有异常)中完成,不会有多线程并发问题package com.example.dtest.design23.singleton.hunger;public class Mgr01 {// 静态变量的初始化,时在类加载过程(类加载只有异常)中完成,不会有原创 2022-02-27 22:27:42 · 1366 阅读 · 0 评论 -
面向对象与设计原则和23种设计模式
面向对象建模:封装包装一下不要让别人知道或者看到的东西,保护好自己的隐私。继承继承就是遗传,子类继承了父类的一些属性和方法(功能)。多态使用指向父类的指针或者引用,能够调用子类的对象。面向对象的分析:一、需求模型5W1H8C:5WWhen 时间 Where 地点 Who 参与人,不一定是“人”,也可以系统,第三方组织机构 What 想要的输出,一个文档一个报告一张图片一个系统等 Why 客户遇到的问题、困难、阻碍也是客户提出的需求的驱动力。1HHow 用来描述整个流程如何原创 2021-01-09 16:54:07 · 1503 阅读 · 0 评论 -
23种设计模式--单例模式--singleton
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/108261179单例设计模式概念单例模式可以说是大多数开发人员在实际中使用最多的,常见的Spring默认创建的bean就是单例模式的。单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。其中单例模式最重要的是确保对象只有一个。简单来说,保证一个类在内存中的对象就一个。饿汉式:类加载到内存后,就实例化一个单例,JVM保证线程安全简单实用,推荐使用!唯一缺点:不管用到与否原创 2021-11-09 09:34:31 · 169 阅读 · 0 评论 -
23种设计模式--总结
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/108340427设计模式的六大原则:总原则:开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。1、单一职责原则不要存原创 2021-11-08 15:17:09 · 217 阅读 · 0 评论 -
23种设计模式--建造者模式
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119083633?spm=1001.2014.3001.5501一、建造者模式和工厂模式区别:建造者模式优点类似于工厂模式,都是用来创建一个对象,但是他们还是有很大的区别,主要区别如下:建造者模式更加注重方法的调用顺序,工厂模式注重于创建完整对象建造者模式根据不同的产品零件和顺序可以创造出不同的产品,而工厂模式创建出来的产品都是一样的造者模式使用者需要知道这个产品有哪些零件组成,而工原创 2021-09-26 16:54:08 · 128 阅读 · 0 评论 -
23种设计模式--桥接模式(Bridge)
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119188465?spm=1001.2014.3001.5501桥接模式:桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。生活案例:在现实生活中,某些类具有两个或多原创 2021-09-27 10:00:21 · 558 阅读 · 0 评论 -
设计模式之--工厂模式
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/1180922351、简单工厂模式简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存 在的目的很简单:定义一个用于创建对象的接口;组成:1、物品的抽象2、一个生产工厂的类3、具体物品类eg:如图:物品抽象和工厂类以依赖连接;代码实例:物品抽象:车public interface Car { void drive();}车具体类:原创 2021-09-30 17:03:31 · 161 阅读 · 2 评论 -
23种设计模式--策略模式
策略模式的体现在接口的作用上,一个接口可以有多个类来实现,根据自己的需要来选择就是策略模式啦!package com.example.dtest.design23.strategry.strategry01;import java.math.BigDecimal;public interface PayStrategy { boolean pay(int money);//支付 BigDecimal queryBalance(String accountNo);//查原创 2021-10-19 10:51:40 · 100 阅读 · 0 评论 -
23种设计模式--中介模式
中介者模式:比如为服务的注册中心就为一个中介;主要是接口加上集合的使用,类之间的关系为聚合的关系;抽象中介类:package com.example.dtest.design23.mediator;public interface Mediator { void register(Colleague colleague);//注册 void relay(Colleague colleague,String msg);//转发}实现中介具体类:将同事类以list集合聚合原创 2021-10-19 11:29:46 · 130 阅读 · 0 评论 -
23种设计模式--装饰器模式
装饰器模式就是为原有类添加新的东西如:在构造上和方法上;但满足对扩展开发对修改关闭原则!对蛋糕进行装饰模式装饰,而装饰器又使用了策略模式进行分类处理!蛋糕抽象类:package com.example.dtest.design23.decorator;import java.math.BigDecimal;public abstract class Cake { public abstract String getCakeMsg(); public abstract Bi原创 2021-10-19 14:33:50 · 122 阅读 · 0 评论 -
23种设计模式--门面模式
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/118108908门面模式就是相当于一键开启;如上图所示:电脑组合了上面的cpu、disk、memory;代码演示:cpu:package com.example.dtest.design23.facade;public class CPU { public void startup(){ System.out.println("cpu startup!原创 2021-10-19 14:45:30 · 131 阅读 · 0 评论 -
23种设计模式--观察者模式(发布订阅演示)
观察者模式就是在某个类中出现情况了,开始执行…如上图:小孩类聚合父亲类,当小孩醒来时,父亲观察到了喂食!代码演示:child类:package com.example.dtest.design23.observe;public class Child { private boolean cry = false; private Dad dad = new Dad(); public boolean isCry(){ return cry; }原创 2021-10-19 15:11:11 · 194 阅读 · 2 评论 -
23种设计模式--责任链模式
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/118230819责任链模式的典型就是过滤器模式:而过滤器模式里的过滤器又使用了策略模式和装饰器模式;过滤器和过滤链形成相互的聚合关系;过滤器需要添加到过滤链中形成聚合关系;而过滤链在使用时,要把自己传递给过滤器使用,进行下一过滤!代码演示如下:自定义的request和response:package com.example.dtest.design23.filter;pu原创 2021-10-19 16:09:13 · 130 阅读 · 0 评论 -
23种设计模式--组合模式
组合模式就是类里面以集合的方式组合了其他的类;如:根节点、树节点、树枝节点树枝节点和叶子节点都实现了节点抽象,而树枝节点又组合了叶子节点!!!下面是代码演示:Node:package com.example.dtest.design23.composite;abstract class Node { abstract public void p();}LeafNode:package com.example.dtest.design23.composite;publi原创 2021-10-20 11:39:06 · 125 阅读 · 0 评论 -
设计模式--享元模式
参考:单例模式和享元模式都是为了避免重复创建对象,但是其本质是不一样的:其实现方式不一样,单例是一个类只有一个唯一的实例,而享元可以有多个实例,只是通过一个共享容器来存储不同的对象。其使用场景不一样,单例是强调减少实例化提升性能,因此一般用于一些需要频繁创建和销毁实例化对象或创建和销毁实例化对象非常消耗资源的类中,如连接池、线程池。而享元则是强调共享相同对象或对象属性,节约内存使用空间。享元模式:简单来说就是池技术:通过池来限制对象的个数;代码展示:案例:使用数据库连接池ConnectionPo原创 2021-10-27 09:04:28 · 130 阅读 · 0 评论 -
设计模式--代理模式Proxy
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/118684585外观模式、代理模式和中介者模式的区别:外观模式(Facade Pattern)定义一个外观类,外观类隐藏系统的复杂性,为客户端提供简化的方法和对现有系统类方法的委托调用。例如:二手房交易的中介,属于外观模式。买房者通过中介可以简单地买到二手房,中介自己把联系房东看房砍价、过户、交税这些复杂的事情都搞定了。代理模式(Proxy Pattern)用一个代理类代表另一个类原创 2021-10-27 15:08:38 · 138 阅读 · 0 评论 -
设计模式--迭代器模式---Iterator
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/118862221定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF 给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。最好的解释就是集合的迭代啦!!下面我们就直接用数组list和链表List来演示迭代:这里主要是巧用了内部类!!!迭代器接口:package com.example.dtest.des原创 2021-10-29 11:03:08 · 165 阅读 · 0 评论 -
设计模式访问者模式--Visitor
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119010496访问者模式适用于数据结构相对稳定, 算法又易变化的系统:程序员还是看代码吧,这一两句也说不清,哈哈:computerPart抽象类:package com.example.dtest.design23.visitor;public abstract class ComputerPart { abstract void accept(Vistitor v)原创 2021-11-02 10:53:10 · 177 阅读 · 0 评论 -
设计模式--建造者模式---Builder
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119083633GOF 给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.这句话说得很抽象,不好理解,其实它的意思可以理解为:将构造复杂对象的过程和组成对象的部件解耦建造者模式和工厂模式区别:建造者模式优点类似于工厂模式,都是用来创建一个对象,但是他们还是有很大的区别,主要区别如下:建造者模式更加注重方法的调用顺序,工厂模式注重于创建完整对原创 2021-11-02 15:43:59 · 148 阅读 · 0 评论 -
设计模式--适配器模式---adapter
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119119434定义:《设计模式》一书中是这样给适配器模式定义的:将一个类的接口转换成客户希望的另外 一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式将一个类的接口,转化成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。生活实例:充电器,美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。原创 2021-11-02 17:20:58 · 259 阅读 · 0 评论 -
设计模式--命令模式---Command
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119463786为什么需要命令模式?在我们的软件开发系统中,行为请求者和真正的执行者通常都是一种紧耦合关系,但是这种情况下,当我们需要修改行为时,如需要撤销或者重做时,只能修改请求者的源代码,命令模式会通过在行为请求者和执行者之间引入一个抽象接口来将请求者和执行者进行解耦,这样如果需要修改行为时,只需要增加对应行为的命令就可以了,完全不需要修改请求者的源代码。通过在你的请求者和真正的执原创 2021-11-04 14:49:21 · 132 阅读 · 0 评论 -
设计模式--原型模式--- prototype
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119493380原型模式定义;原型模式属于对象创建模式,GOF 给它的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Java中的原型模式:在 Java 中提供了clone()方法来实现对象的克隆,所以Prototype 模式实现变得简单许 多。原型模式分为浅克隆深克隆代码演示:浅克隆:实现条件:1. implements Cloneable接口原创 2021-11-05 09:35:44 · 178 阅读 · 2 评论 -
设计模式--备忘录模式---Memento
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119546968备忘录模式 分类:备忘录角色要保持完整的封装。最好的情况便是:备忘录角色只应该暴露操作内部存储属性的的接口给“备忘发起角色”。而对于其他角色则是不可见的备忘录模式又可以分为“白箱”备忘录模式和“黑箱”备忘录模式。“白箱”备忘录模式备忘录角色提供一个宽接口的话,备忘录的内部存储状态就对所有对象公开,这就是“白箱实现”。“白箱”实现破坏了封装性,但是通过程序员自律,可以原创 2021-11-05 16:00:39 · 212 阅读 · 0 评论 -
23中设计模式--模板方法模式---Template Method Pattern
参考:https://blog.youkuaiyun.com/weixin_48052161/article/details/119655854模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延 迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在 内容上存在变数的环节。日常生活中的模板方法:造房时,地基、走线、水管都一样,只有在建筑后期装修上才有差异西游记里原创 2021-11-05 17:31:23 · 123 阅读 · 0 评论 -
23种设计模式--状态模式---State
生活中的状态模式:以水为例,水之三态,固、液、气,三种状态表现出不同的特性和行为,它们之间的转换也伴随着热力学的现象。电梯,有运行状态、开门状态、闭门状态、停止状态等QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作java线程分为:新建状态(New),就绪状态(Runnable),运行状态(Running),阻塞状态(Blocked),死亡状态(Dead)代码演示:一个漂亮的MM 有开心和悲伤两种状态,且不同转态下,MM说的话,和哭笑的动作,都会根据状态的不同而不同.if–el原创 2021-11-08 09:41:16 · 149 阅读 · 0 评论 -
23种设计模式--解释器模式---Interpreter
这是我们23个设计模式中最后一个设计模式了,大家或许也没想到吧,竟然是编译原理上的编译器,这样说可能不对,因为编译器分为几个部分组成呢,比如词法分析器、语法分析器、语义分析器、中间代码优化器以及最终的最终代码生成器。而这个解释器其实就是完成了对语法的解析,将一个个的词组解释成了一个个语法范畴,之后拿来使用而已。为什么会有这个解释器模式呢,我想这是从编译原理中受到启发的,使用了这样的一个解释器可以在Java语言之上在定义一层语言,这种语言通过Java编写的解释器可以放到Java环境中去执行,这样如果用户的需原创 2021-11-08 11:57:29 · 257 阅读 · 0 评论