
设计模式
文章平均质量分 89
can_chen
自知无知,永远求知!
展开
-
设计模式之代理模式
代理模式属于结构型模式,是23种设计模式中较为重要的一种,代理模式分为静态代理和动态代理,动态代理又分为基于接口实现的动态代理和基于子类实现的动态代理;在jdk源码中,很多底层的实现也是基于代理模式的,例如创建线程的方式之一实现Runnable接口就使用了静态代理模式,而Spring框架最为重要的AOP的实现是基于动态代理模式,可见,学习代理模式是我们能看懂底层源码实现原理的一个基础。静态代理关于静态代理,我们以小明结婚为例,看以下代码://代理对象和真实对象共同实现的接口,里面有结婚方法inter原创 2020-08-05 23:50:52 · 2456 阅读 · 0 评论 -
设计模式之适配器模式
工作原理:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作从用户的角度看是看不到被适配者的,是解耦的适配器模式属于结构型模式,主要分三类:类适配器模式、对象适配器模式、接口适配器模式类适配器模式假设我们现在有这么一个需求:需要给我们的手机充电,手机充电只能使用5V的电压,但是我们家里的插座却是220V的电压,也就是说手机无法直接使用220V的插座进行充电,那么现在就需要一个适配器来进行5V电压和220V电压的转换,这个适配器原创 2020-06-26 13:06:42 · 572 阅读 · 0 评论 -
适配器模式在SpringMVC中的应用
今天花了好几个小时撸了SpringMVC的部分源码,在此进行分享!SpringMVC 中的 HandlerAdapter, 就使用了适配器模式;下面我们通过源码来分析SpringMVC 中的 HandlerAdapter是如何使用适配器模式的://前端控制器DispatcherServlet类public class DispatcherServlet extends FrameworkS...原创 2020-04-14 23:29:31 · 772 阅读 · 0 评论 -
策略模式在jdk源码中的应用
关于策略模式的介绍可以参考上一篇博客:https://blog.youkuaiyun.com/can_chen/article/details/106745298策略模式的典型例子设计一个网上书店,该系统中所有的计算机图书(ComputerBook),每本都有10%的折扣;所有的语言类图书(LanguageBook),每本有2元的折扣;小说类图书以每100元有10元的折扣,用策略模式设计该系统模式类图:代码实现://策略接口public interface BookStrategy { //提供计原创 2020-06-14 18:51:43 · 904 阅读 · 0 评论 -
设计模式之策略模式
策略模式(Strategy Pattern)我们先通过一个例子来引出策略模式:猴子问题:有各种各样的猴子,婴猴,长臂猿,玩具猴等,猴子有各种行为,比如叫爬树、叫、直立行走等;现在我们需要对各种猴子进行一个设计,使得每种猴子都可以显示自己的种类信息。编码如下://抽象的猴子,包含猴子普遍拥有的行为public abstract class Monkey { public abstract void show(); public void quack(){ System.out.printl原创 2020-06-14 13:50:34 · 564 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式(Iterator Pattern)迭代器模式是非常常见的设计模式,属于行为型模式,迭代器模式提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式的优缺点优点:封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。提供了一种 设计思想,就是一个类应该只有一个引起变化的原因(叫做单一责原创 2020-06-06 21:51:15 · 386 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式手抓饼问题:我们可以单点一个手抓饼,也可以给手抓饼添加一些配料,比如可以添加鸡蛋、培根、火腿等,有了这些配料之后,那么我们可以点一个鸡蛋手抓饼、鸡蛋火腿手抓饼、还可以点一个加了两个鸡蛋一个火腿的手抓饼……,组合有很多种,另外,我们还要能够计算出每个手抓饼的价格!第一种方案:我首先想到的设计一个抽象父类Food(食物类),该抽象类包含一个抽象方法cost,用于计算手抓饼的价格,然后再根...原创 2020-04-27 11:45:11 · 606 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式(Builder Pattern)属于创建型模式;何为创建型模式?就是帮我们省去直接new的过程,从而帮助我们更好的创建对象。建造者模式又叫生成器模式,它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。就好比...原创 2020-05-04 23:10:06 · 478 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式(Factory Pattern)属于创建型模式,分为简单工厂模式、工厂方法模式和抽象工厂模式;有的地方是把工厂模式和抽象工厂模式区分开来,工厂模式只包括简单工厂模式、工厂方法模式;其实怎么划分因人而异,最主要的是要能够知道这几种模式的思想,并且了解他们的异同点,知道在哪种场景下适合用哪种模式即可!我们之前创建一个对象,都是通过new来直接创建,例如下面的代码,这样做的缺点就是客户端要了...原创 2020-05-04 21:53:58 · 740 阅读 · 3 评论 -
设计模式之单例模式
什么是单例模式?所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且对该类只提供一个取得其对象实例的方法(公有的静态方法)优点:由于单例模式只生成一个实例,减少了系统性能的开销单例模式的常见场景windows的任务管理器、回收站都是使用单例模式,比如我打开了一个任务管理器,再想打开任务管理器,它不会再弹出一个来,而保证桌面只出现一个任务管理器...原创 2020-03-24 00:17:30 · 625 阅读 · 1 评论 -
里式替换原则(LSP)
里式替换原则(LSP)里式替换原则是设计模式七大原则之一,这个原则是我们学习设计模式的基础,里式替换原则就是引导我们正确的去使用继承,由于当时在学习这个原则的时候,花费了不少时间,学习这个原则也顺带复习了java基础中的继承、重载和重写。所以才写下这篇文章,作为整理。如有写的不对的地方,麻烦各位大佬指正!重载(overload)重载的规则:①方法名必须相同②参数列表必须不同(包括参数的个...原创 2020-03-12 18:07:48 · 676 阅读 · 0 评论