![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 91
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day808.设计模式一些列问题 -Java 性能调优实战
Hi,我是阿昌,今天学习记录的是关于之前设计模式中的一些问题设计模式一些问题的记录。不仅可以优化代码结构,使代码可扩展性、可读性强,同时也起到了优化系统性能的作用。在一些高并发场景中,线程协作相关的设计模式可以大大提高程序的运行性能。原创 2022-11-22 22:25:33 · 338 阅读 · 0 评论 -
Day807.装饰器模式 -Java 性能调优实战
接口具体对象装饰类具体装饰类接口定义了具体对象的一些实现方法;具体对象定义了一些初始化操作,比如开头设计装修功能的案例中,水电装修、天花板以及粉刷墙等都是初始化操作;装饰类则是一个抽象类,主要用来初始化具体对象的一个类;其它的具体装饰类都继承了该抽象类。/*** 定义一个基本装修接口*/*** 装修方法}/*** 装修基本类*/*** 基本实现方法System . out . println("水电装修、天花板以及粉刷墙。。。");} }/*** 基本装饰类*原创 2022-11-21 22:25:28 · 244 阅读 · 0 评论 -
Day805.使用设计模式优化并发编程 -Java 性能调优实战
平时,如果需要传递或隔离一些线程变量时,可以考虑使用上下文设计模式。在数据库读写分离的业务场景中,则经常会用到 ThreadLocal 实现动态切换数据源操作。但在使用 ThreadLocal 时,需要注意内存泄漏问题。当主线程处理每次请求都非常耗时时,就可能出现阻塞问题,这时候我们可以考虑将主线程业务分工到新的业务线程中,从而提高系统的并行处理能力。Thread-Per-Message 设计模式以及 Worker-Thread 设计模式则都是通过多线程分工来提高系统并行处理能力的设计模式。原创 2022-11-19 13:00:49 · 231 阅读 · 0 评论 -
Day804.原型模式与享元模式 -Java 性能调优实战
两种模式无论是在开源框架,还是在实际开发中,应用都十分广泛。在不得已需要重复创建大量同一对象时,可以使用原型模式,通过 clone 方法复制对象,这种方式比用 new 和序列化创建对象的效率要高;在创建对象时,如果我们可以共用对象的内部数据,那么通过享元模式共享相同的内部数据的对象,就可以减少对象的创建,实现系统调优。上一讲的单例模式和这一讲的享元模式都是为了避免重复创建对象,你知道这两者的区别在哪儿吗?单例模式,就是单个实例的模式,一般针对类来说的,也就是类实例,一个单例模式包含一个类实例。原创 2022-11-18 20:45:27 · 441 阅读 · 0 评论 -
Day803.单例模式 -Java 性能调优实战
它的核心在于,单例模式可以保证一个类仅创建一个实例,并提供一个访问它的全局访问点。一是这个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。//饿汉模式 public final class Singleton {//自行创建实例 private Singleton() {} //构造函数 public static Singleton getInstance() {//通过该函数向整个系统提供实例 return instance;} }原创 2022-11-17 22:24:33 · 246 阅读 · 0 评论 -
Day698.Tomcat的日志框架及实战 -深入拆解 Tomcat & Jetty
默认情况下,Tomcat 的日志模板叫作 JULI,JULI 的日志门面采用了 JCL,而具体实现是基于 Java 默认的日志框架 Java Util Logging,Tomcat 在 Java Util Logging 基础上进行了改造,使得它自身的日志框架不会影响 Web 应用,并且可以分模板配置日志的输出文件和格式。Tomcat 独立部署时,各种日志都输出到了相应的日志文件,假如 Spring Boot 以内嵌式的方式运行 Tomcat,这种情况下 Tomcat 的日志都输出到哪里去了?...原创 2022-08-04 21:54:58 · 945 阅读 · 0 评论 -
Day697.Spring框架中的设计模式 -深入拆解 Tomcat & Jetty
Spring 的两大核心功能IOC和AOP中用到的一些设计模式,主要有简单工厂模式、工厂方法模式、单例模式和代理模式。而代理模式又分为静态代理和动态代理。注意到在 newProxyInstance 方法中,传入了目标类的加载器、目标类实现的接口以及 MyInvocationHandler 三个参数,就能得到一个动态代理对象,请你思考一下 newProxyInstance 方法是如何实现的。...原创 2022-08-03 21:13:41 · 259 阅读 · 0 评论 -
Day646.代码重复问题 -Java业务开发常见错误
Hi,我是,我又来了!今天所学习分享记录的是针对重复代码消除的一些设计模式的解决方案方案。一个项目是大型项目成熟度的一个重要指标,而提升可维护性非常重要的一个手段就是减少代码重复。案例:假设要开发一个购物车下单的功能,针对不同用户进行不同处理:我们的目标是实现三种类型的购物车业务逻辑,把入参 Map 对象(Key 是商品 ID,Value 是商品数量),转换为出参购物车类型 Cart。先实现针对普通用户的购物车处理逻辑:然后实现针对 VIP 用户的购物车逻辑。与普通用户购物车逻辑的不同在于,VIP 用户能原创 2022-06-13 22:13:13 · 566 阅读 · 0 评论 -
8种单例模式的实现
单例模式8种写法一、单例模式的作用1、为什么需要单例模式?- 节省内存和计算、- 保证结果正确、- 方便管理2、使用场景3、 8种写法饿汉式(静态常量)—可用*//饿汉式(静态常量) ---可用public class Singleton1 { private final static Singleton1 INSTANCE = new Singleton1(); private Singleton1(){} public static Singl原创 2021-05-30 22:29:59 · 202 阅读 · 4 评论 -
Day322&323.设计模式回顾 -Java设计模式
设计模式一、七大原则1、单一职责原则一个类就管一件事2、接口隔离原则一个接口,有他自己的方法;当他的子类实现只需要实现对应只想实现的方法,不应该是全部实现;将接口Interface1拆分为独立的几个接口,让一个类对另一个类的依赖应该建立在最小的接口上3、依赖倒转原则抽象不应该依赖细节,细节应该依赖抽象如让一个方法的参数依赖接口,而不是具体的实现类,这样子就可以传入这个接口的实现类,更具有扩展性4、里氏替换原则子类中尽量不要重写父类的方法,可以通过聚合,组合,依赖 来解原创 2021-07-08 22:42:51 · 310 阅读 · 3 评论 -
Day305.设计模式七大原则 -Java设计模式
七大设计原则一、设计模式的目的编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的↓↓↓代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性, 便于其他程序员的阅读和理解)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性二、设计模式七大原则设计模式原则原创 2021-06-21 22:50:37 · 423 阅读 · 0 评论 -
Day321.策略模式&职责链模式 -Java设计模式
策略模式将原本继承的方式,换成组合、聚合一、编写鸭子项目,具体要求如下:1)有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)2)显示鸭子的信息二、传统方案解决鸭子问题的分析和代码实现1)传统的设计方案(类图)2)类图3)代码实现Duck抽象类public abstract class Duck { public Duck() {} public abstract void display();//显示鸭子信息 p原创 2021-07-07 22:17:33 · 445 阅读 · 2 评论 -
Day320.解释器模式&状态模式 -Java设计模式
解释器模式根据不同的业务场景,来对应抽象不同的元素抽象类,抽象类可能有多个子类,然后实现解释一个表达式的处理一、四则运算问题通过解释器模式来实现四则运算,如计算 a+b-c 的值,具体要求1)先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复2)在分别输入 a ,b, c, d, e 的值3)最后求出结果:如图二、传统方案解决四则运算问题分析1)编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果2)问题分析:如果加入新的运算符,比如 * / (原创 2021-07-06 22:54:36 · 240 阅读 · 1 评论 -
Day319.中介者模式&备忘录模式 -Java设计模式
中介者模式交给中介者去完成需求,让原本相互调用的组件解耦一、智能家庭项目智能家庭项目:1)智能家庭包括各种设备, 闹钟、咖啡机、电视机、窗帘等2)主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放二、传统方案解决智能家庭管理问题三、传统的方式的问题分析1)当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂2)各个电器对象彼此联系,你中有我,我中有你,不利于松耦合。3)各原创 2021-07-05 22:06:59 · 221 阅读 · 1 评论 -
Day318.迭代器模式&观察者模式 -Java设计模式
迭代器模式关注在数据遍历一、需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图:二、传统的设计方案(类图)三、传统的方式的问题分析1)将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的2)实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作3)解决方案:=> 迭代器模式四、迭代器模式基本介绍基原创 2021-07-04 20:19:27 · 282 阅读 · 2 评论 -
Day317.访问者模式 -Java
访问者模式这个模式用的很少,《设计模式》的作者评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了一、测评系统的需求1)将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)二、 传统方式的问题分析1)如果系统比较小,还是 ok 的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了 ocp 原则,不利于维护2)扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做原创 2021-07-03 21:49:19 · 233 阅读 · 3 评论 -
Day316.模版模式&命令模式 -Java
模板模式一、豆浆制作问题编写制作豆浆的程序,说明如下:1)制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎2)通过添加不同的配料,可以制作出不同口味的豆浆3)选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的4)请使用模板方法模式完成(说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用, 不再使用传统的方案来引出模板方法模式 )二、模板方法模式基本介绍基本介绍1)模板方法模式(Template Method Patt原创 2021-07-02 23:29:52 · 268 阅读 · 1 评论 -
Day315.代理模式 -Java设计模式
代理模式一、 代理模式(Proxy)1、代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)。代理模式原创 2021-07-01 22:06:25 · 373 阅读 · 1 评论 -
Day314.外观模式&享元模式 -Java设计模式
外观模式外观类就是总控开关,去管理聚合的所有类一、影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关开爆米花机放 下 屏 幕 开 投 影 仪 开音响开 DVD,选 dvd去拿爆米花调 暗 灯 光 播放观影结束后,关闭各种设备二、传统方式解决影院管理分别定义每个设备的类,然后在主方法按顺序调用打开,或关闭三、传统方式解决影院管理问题分析1)在 ClientTest 的 main 方原创 2021-06-30 22:22:23 · 303 阅读 · 0 评论 -
Day313.组合模式 -Java设计模式
组合模式一、学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统方案解决学校院系展示(类图)传统方案解决学校院系展示存在的问题分析1)将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的2)实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等3)解决原创 2021-06-29 22:26:14 · 251 阅读 · 1 评论 -
Day312.装饰者模式 -Java设计模式
装饰者模式套娃模式,直接new放构造器里面套把抽象类聚合到它的子类里 该子类(装饰者)构造抽象类的实现(被装饰者)一、星巴克咖啡订单项目(咖啡馆)1)咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)2)调料:Milk、Soy(豆浆)、Chocolate3)要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便4)使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。二、原创 2021-06-28 22:54:02 · 325 阅读 · 1 评论 -
Day311.桥接模式 -Java设计模式
桥接模式一、手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:二、 传统方案解决手机操作问题传统方法对应的类图三、 传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本.解决方案-使用桥接模式四、 桥接模式(Bridg原创 2021-06-27 21:28:07 · 227 阅读 · 1 评论 -
Day310.建造者模式&适配器模式 -Java设计模式
建造者模式一、 盖房项目需求1)需要建房子:这一过程为打桩、砌墙、封顶2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3)请编写程序,完成需求.二、传统方式解决盖房需求思路分析(图解)代码演示抽象房子类:↓public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract vo原创 2021-06-26 16:12:19 · 374 阅读 · 2 评论 -
Day309.原型模式 -Java设计模式
原型模式一、克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10只羊。二、传统方式解决克隆羊问题图解代码演示羊实体类//羊实体类public class Sheep { private String name; private Integer age; private String color; public String getName() { retur原创 2021-06-25 22:42:36 · 302 阅读 · 1 评论 -
Day308.工厂模式 -Java设计模式
工厂模式一、简单(静态)工厂模式1、看一个具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare,bake, cut, box完成披萨店订购功能。2、使用传统的方式来完成1) 思路分析(类图)编写 OrderPizza.java 去订购需要的各种 Pizza2) 代码演示public class OrderPizza { //构造器 pub原创 2021-06-24 22:27:13 · 419 阅读 · 2 评论 -
Day307.单例模式 -Java设计模式
单例模式一、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。二、单例设计模式八种方式单例模式有八种方式:1) 饿汉式原创 2021-06-23 22:15:09 · 335 阅读 · 0 评论 -
Day306.UML类图 -Java设计模式
UML类图一、 UML 基本介绍1、UML——Unified modeling language UML (统一建模语言)是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果2、UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如图:依赖注入是使用,set注入是聚合,构造器注入是组合二、UML 图画 UML 图与写文章差不多,都是把自己的原创 2021-06-22 21:42:50 · 483 阅读 · 0 评论