设计模式
文章平均质量分 90
秦怀
这个作者很懒,什么都没留下…
展开
-
设计模式【15】--从审批流中学习责任链模式
已经来到了责任链模式,各位客官听我瞎扯…责任链模式是什么责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。(百度百科)责任链模式是一种行为型设计模式,也就是重点是处理数据,假设我们有一份数据,需要经过很多个节点处理,那么就会是以下这个样子:一个节点处理完之后,交给下一.原创 2022-02-16 09:08:14 · 1069 阅读 · 0 评论 -
设计模式【14】-- 从智能音箱中学习命令模式
开局还是那种图,各位客官往下看…张无忌学太极拳,忘记了所有招式,打倒了"玄冥二老",所谓"心中无招"。设计模式可谓招数,如果先学通了各种模式,又忘掉了所有模式而随心所欲,可谓OO之最高境界。命令模式是什么?在面向对象程式设计的范畴中,命令模式(Command Pattern)是一种设计模式,它尝试以物件来代表实际行动。命令模式是一种行为型模式,它将请求以命令的形式包裹在对象里面,传递给调用对象,调用对象寻找匹配该命令的对象,将命令给该对象执行。也就是分为了三步:1、命令被包裹在请求对象.原创 2022-02-11 09:08:16 · 483 阅读 · 0 评论 -
设计模式【13】-- 模板模式怎么弄?
开局还是那种图,各位客官往下看…张无忌学太极拳,忘记了所有招式,打倒了"玄冥二老",所谓"心中无招"。设计模式可谓招数,如果先学通了各种模式,又忘掉了所有模式而随心所欲,可谓OO之最高境界。模板模式是什么?模板模式,同样是一种行为型模式,也就是关于对象做什么或者怎么做的设计模式。模板模式的本质需要定义操作中的算法的框架,但是有一些步骤,又不需要具体的实现,而是不同的子类各自实现。子类不能修改流程框架,但是部分的步骤可以做定制化的实现。主要要解决一个问题:一些通用的方法,但是每一个子类却都重新写.原创 2022-02-10 08:36:25 · 322 阅读 · 0 评论 -
设计模式【12】-- 最近大火的策略模式
开局还是那种图,最近策略模式貌似很火,各位客官往下看…策略模式到底是什么?前面我们其实已经将结构型模式讲解完了,剩下的全都是行为型模式,三种模式的区分:创建型模式:如何创建一个对象结构型模式:对象内部的构造是如何构造的行为型模式:对象是如何运行(可以做什么)而提到策略模式,我们该如何理解呢?从北京到上海,可以坐飞机,也可以坐动车,也可以坐绿皮,甚至可以骑自行车,这些不同的方式,就是策略。一件商品,可以直接打 5 折,也可以加 100 再打 6 折,也可以打 5.5 折之后返回现原创 2022-01-24 08:33:03 · 286 阅读 · 0 评论 -
设计模式【10】-- 顺便看看享元模式
开局还是那种图,各位客官往下看…享元模式是什么?享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能。说到这里,不知道你是否会想到池技术,比如String 常量池,数据库连接池,缓冲池等等,是的,这些都应用了享元模式。比如,有一些对象,创建时候需要资源比较多,创建成本比较高,内存开销比较大,如果我们一直创建,机器吃不消,那么我们就想到了池化技术,把创建好的对象放在里面,需要时,去池子里面取就可以了,也就是大家共享了池子里面的对象,这就是共享。听.原创 2022-01-09 15:18:45 · 493 阅读 · 0 评论 -
设计模式【9】-- 外观模式?没那么高大上
开局一张图,剩下全靠写…外观模式是什么外观模式,其实是用来隐藏系统的复杂性的,屏蔽掉了背后复杂的逻辑,向用户提供简单的可以访问系统的接口,也是属于结构型模式的一种 。举个例子,比如我们的Java 三层MVC架构,对外提供的是controller,但是controller内部可能调用了很多service,service又调用了一些mapper,反正就是内部很复杂,但是对外只是一个接口,一个门面,外部看起来是简单的,外观很好看,实际上,你都懂。再举个栗子,我们用的电脑,其实内部也是极其复杂的,但是我.原创 2022-01-07 08:38:56 · 308 阅读 · 0 评论 -
设计模式【8】-- 手工耿教我写装饰器模式
装饰器模式前面学习了好几种设计模式,今天继续…装饰器模式,属于结构型模式,用来包裹封装现在的类对象,希望可以在不修改现在类对象和类定义的前提下,能够拓展对象的功能。调用的时候,使用的是装饰后的对象,而不是原对象。,提供了额外的功能。不知道大家有没有看手工耿的自制钢琴烤串车视频【https://www.bilibili.com/video/BV1334y1Z7kq?spm_id_from=333.999.0.0 】, 本来是一个钢琴,但是为了边弹琴,边烤串,改造装饰了一下,变成了特殊的钢琴,提供了.原创 2022-01-06 08:41:22 · 341 阅读 · 0 评论 -
设计模式【7】-- 探索一下桥接模式
设计模式,写代码必备神器…桥接模式是什么?桥接模式是把抽象化和实现化解耦,让两者可以独立,该设计模式属于结构性设计模式。何为将抽象化和实现化解耦,可以理解为将功能点抽象出来,功能的实现如何取决于不同的需求,但是抽象的功能点(接口)已经被桥接到原本的类型上,只用关注与实现。原本的类型变化,和抽象的功能点可以自由变化,中间的桥梁已经搭建起来了。桥接模式其实就是不单单使用类继承的方式,而是重点使用类聚合的方式,进行桥接,把抽象的功能点,聚合(注入)到基类里面。桥接模式的好处一般用于解决什么问题呢?主原创 2022-01-05 08:19:47 · 306 阅读 · 0 评论 -
设计模式【6.1】-- 初探适配器模式
设计模式文章集合:http://aphysia.cn/categories/designpattern开局一张图,剩下全靠写…介绍适配器模式(百度百科):在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器模式的主要目的就是为了兼容性,把原来不匹配的两个类或者接口可以协同工作,它属于结构型模式,主要分为三种:类适配器,对象适配器,接口适配器。适原创 2021-12-14 08:42:31 · 512 阅读 · 0 评论 -
设计模式【5】-- 原型模式
开局一张图,剩下全靠写…设计模式文章集合:http://aphysia.cn/categories/designpattern前言接触过 Spring 或者 Springboot 的同学或许都了解, Bean 默认是单例的,也就是全局共用同一个对象,不会因为请求不同,使用不同的对象,这里我们不会讨论单例,前面已经讨论过单例模式的好处以及各种实现,有兴趣可以了解一下:http://aphysia.cn/archives/designpattern1。除了单例以外,Spring还可以设置其他的作用域,也原创 2021-12-11 09:57:37 · 649 阅读 · 0 评论 -
设计模式【4】-- 建造者模式详解
开局一张图,剩下全靠写…引言设计模式集合:http://aphysia.cn/categories/designpattern如果你用过 Mybatis ,相信你对以下代码的写法并不陌生,先创建一个builder对象,然后再调用.build()函数:InputStream is = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBu原创 2021-12-02 09:03:13 · 624 阅读 · 0 评论 -
设计模式【3.3】-- CGLIB动态代理源码解读
cglib 动态代理cglib介绍CGLIB 是一个开源项目,一个强大高性能高质量的代码生成库,可以在运行期拓展 Java 类,实现 Java 接口等等。底层是使用一个小而快的字节码处理框架 ASM,从而转换字节码和生成新的类。理论上我们也可以直接用 ASM 来直接生成代码,但是要求我们对 JVM 内部,class 文件格式,以及字节码的指令集都很熟悉。这玩意不在 JDK 的包里面,需要自己下载导入或者 Maven 坐标导入。我选择 Maven 导入, 加到 pom.xml 文件:<de.原创 2021-11-08 22:37:03 · 600 阅读 · 0 评论 -
设计模式【3.2】-- JDK动态代理源码分析有多香?
前面文章有说到代理模式:http://aphysia.cn/archives/dynamicagentdesignpattern那么回顾一下,代理模式怎么来的?假设有个需求:在系统中所有的 controller 类调用方法之前以及之后,打印一下日志。假设原来的代码:public class Person{ public void method(){ // 表示自己的业务逻辑 process(); }}如果在所有的类里面都添加打印方法,这样肯定原创 2021-11-06 21:00:47 · 340 阅读 · 0 评论 -
设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
还记得之前的工厂方法模式么?现在老板更加富有了,除了水果,还准备搞点其他的生意,再做点服装生意。水果工厂和服装工厂明显就不是同一种东西,肯定不能放到一个工厂里面生产,服装也有好几种,但是不同的工厂,也是老板自己的,老板希望能够把握大局,所以不同工厂,肯定是有同一个特征的,也就是他们都是工厂,并且都是老板的。先来创建一个接口Fruit.java:public interface Fruit { public void print();}创建水果的实体类Apple.java:public c原创 2021-02-24 01:04:18 · 323 阅读 · 0 评论 -
设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式?
还记得前面的简单工厂模式么?我们开了一个水果工厂FruitFactory,生产三种水果Apple,Pear,Orange。今天给大家讲讲工厂方法模式:老板搞水果工厂赚了点小钱,准备扩大生产,每个工厂生产一种水果,各司其职,而不是把所有的产品类型都放到一个工厂中。既然有多工厂,那我们和之前一样,搞一个水果工厂类FruitFactory,把它搞成接口类。import factory.Fruit;public interface FruitFactory { public Fruit getFru原创 2021-01-23 15:14:49 · 460 阅读 · 0 评论 -
设计模式【2】-- 简单工厂模式了解一下?
文章目录1.简单工厂模式介绍2.简单工厂模式举例3.简单工厂模式的优劣1.简单工厂模式介绍工厂模式,比较常用,属于创建型模式,也就是主要是用来创建对象的。工厂模式,有三种,主要分为:简单工厂模式工厂方法模式抽象工厂模式其中,本文要讲的就是,简单工厂模式,但是简单工厂模式,并不是属于GoF讲的23种设计模式中。简单工厂模式,也叫静态工厂方法模式。简单而言,就是有一个具体的工厂类,用来生产不同类型的对象,而这些对象,都有相似的特点,它们都实现同一个接口。什么时候应该使用工厂模式?为什么需要工厂原创 2020-12-26 17:03:11 · 257 阅读 · 0 评论 -
设计模式【1.3】-- 为什么饿汉式单例是线程安全的?
我们都知道,饿汉式单例是线程安全的,也就是不会初始化的时候创建出两个对象来,但是为什么呢?首先定义一个饿汉式单例如下: public class Singleton { // 私有化构造方法,以防止外界使用该构造方法创建新的实例 private Singleton(){ } // 默认是public,访问可以直接通过Singleton.instance来访问 static Singleton instance = new Singleton();}之所以是线原创 2020-12-26 17:02:44 · 1249 阅读 · 2 评论 -
设计模式【1.2】-- 枚举式单例有那么好用么?
文章目录1. 单例是什么?2. 枚举的单例可以被破坏么?3. 总结一下1. 单例是什么?单例模式:是一种创建型设计模式,目的是保证全局一个类只有一个实例对象,分为懒汉式和饿汉式。所谓懒汉式,类似于懒加载,需要的时候才会触发初始化实例对象。而饿汉式正好相反,项目启动,类加载的时候,就会创建初始化单例对象。前面说过单例模式以及如何破坏单例模式,我们一般情况尽可能阻止单例模式被破坏,于是各种序列化,反射,以及克隆的手段,我们都需要考虑进来,最终的代码如下:import java.io.Serializa原创 2020-12-26 17:01:57 · 288 阅读 · 0 评论 -
设计模式【1.1】-- 你想如何破坏单例模式?
文章目录1.单例是什么?1.1 优点1.2 缺点2. 破坏单例的几种方法2.1 通过构造器创建对象2.2 反射调用构造器2.3 实现了cloneable接口2.4 序列化破坏单例3. 小结1.单例是什么?单例模式:是一种创建型设计模式,目的是保证全局一个类只有一个实例对象,分为懒汉式和饿汉式。所谓懒汉式,类似于懒加载,需要的时候才会触发初始化实例对象。而饿汉式正好相反,项目启动,类加载的时候,就会创建初始化单例对象。1.1 优点如果只有一个实例,那么就可以少占用系统资源,节省内存,访问也会相对较快。原创 2020-12-26 17:01:21 · 283 阅读 · 0 评论 -
适配器模式
这里说的适配器不是通常所说的类适配器,对象适配器,接口适配器,这里实现的是把所有的类进行统一管理的适配器。如需要查找设计模式的三种主要适配器模式,请点击https://blog.csdn.net/Aphysia/article/details/80291916 适配器模式(百度百科):在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一...原创 2018-05-12 15:44:49 · 453 阅读 · 0 评论 -
代理模式之适配器模式
适配器模式(百度百科):在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。主要目的就是为了兼容性,把原来不匹配的两个类或者接口可以协同工作。这是结构型模式,主要分为三种:类适配器,对象适配器,接口适配器。1.类适配器描述:适配器的类(...原创 2018-05-12 15:39:25 · 957 阅读 · 0 评论 -
设计模式之代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问,在某种情况下,一个对象不适合或者不能够直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。 可以这么理解:使用代理对象,是为了在不修改目标对象的基础上,增强主业务的逻辑。就相当于某个普通人(目标对象),他现在需要打官司,那么他可以自己学习法律,为自己辩护(相当于把业务代码逻辑自己来实现),这就是修改了目标对...原创 2018-05-10 10:48:52 · 335 阅读 · 0 评论 -
设计模式之单例模式
单例模式,是一种比较简单的设计模式,也是属于创建型模式(提供一种创建对象的模式或者方式)。 要点: 1.涉及一个单一的类,这个类来创建自己的对象(不能在其他地方重写创建方法,初始化类的时候创建或者提供私有的方法进行访问或者创建,必须确保只有单的对象被创建)。 2.单例模式不一定是线程不安全的。 3.单例模式可以分为两种:懒汉模式(在第一次使用类的时候才创建,可...原创 2018-04-16 11:07:08 · 437 阅读 · 0 评论