![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每天一个设计模式
alex-zhou96
男儿欲遂平生志,五经勤向窗前读。
展开
-
迭代器模式
介绍这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把元素之间游走的责任交给迭代器而不是聚合对象应用实例:JAVA中的iterator优点它支持以不同的方式遍历一个聚合对象迭代器简化了聚合类在同一个聚合上可以有多个遍历在迭代器模式中,增加新的聚合类和迭代器都很方便,无须修改原有的代码...原创 2020-07-08 20:27:03 · 112 阅读 · 0 评论 -
职责链模式
定义顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接受者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止主要职责:职责链上原创 2020-07-05 14:21:32 · 154 阅读 · 0 评论 -
模板模式
介绍在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到了子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤主要解决:一些方法通用,却在每一个子类都重新写了这一方法应用实例Spring中对Redis等数据库的支持,定义好RedisTemplate等方法,将一些已经定好的方法封装原创 2020-07-05 12:28:56 · 141 阅读 · 0 评论 -
装饰器设计模式
介绍装饰器设计模式允许向一个现有的对象增加新的功能,同时又不改变其结构,这种类型的设计模式属于结构型设计模式,它是作为现有类的一个包装这种模式创建了一个装饰类,用来包装原有的类,并在保池类方法签名完整性的前提下,提供了额外的功能优点装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个代替模式,装饰模式可以动态扩展一个实现类的功能。缺点多层装饰比较复杂。例子;coffere代码在JDK中应用–IO流...原创 2020-07-04 20:56:24 · 173 阅读 · 0 评论 -
代理模式(Spring AOP)
介绍在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外提供功能接口意图:为其他对象提供一种代理以控制对这个对象的访问主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销大,或者某些操作需要安全控制,或者需要进程外的范文),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时原创 2020-07-02 16:42:23 · 150 阅读 · 0 评论 -
设计模式6大原则
开闭原则**开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能取修改原有的代码,实现一个热插拔的效果。简言之,是为了使得程序的扩展性好,易于维护和升级。要想达到这样的效果,我们需要使用接口和抽象类,后面的具体实现里氏替换原则历史替换的原则说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不收到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。历史替换原则是对开闭原则的补充。实现开闭原则的关键原创 2020-07-01 15:57:55 · 126 阅读 · 0 评论 -
桥接模式
介绍桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。意图将抽象部分与实现部分分离,使得他们都可以独立的变化。主要解决在有多种可能变化的情况下下,用继承会造成类爆炸的问题,扩展起来不灵活。何时使用实现系统有可能有多个角度分类,每一中角度都可能变化。代码//品牌package FBridge;/** * @Author Zhou jian * @Date 20原创 2020-07-01 15:44:06 · 161 阅读 · 0 评论 -
适配器模式
介绍将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。角色分析目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口需要适配的类:需要适配的类或者适配者类适配器:通过包装一个需要适配的对象实例USB-上网//computerpackage Eadapter;/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/30 0030 .原创 2020-06-30 16:23:35 · 150 阅读 · 0 评论 -
原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。实现继承cloneable接口重写clone()方法可能存在浅拷贝的问题,对象的clon原创 2020-06-28 15:56:18 · 126 阅读 · 0 评论 -
建造者模式
建造者模式建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式定义:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。主要作用:在用户不知道对象的创建过程和细节的情况下直接创建复杂的对象。主要解决在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内原创 2020-06-28 15:30:05 · 1180 阅读 · 0 评论 -
工厂模式
文章目录简单工厂模式工厂方法模式抽象工厂模式优点使用场景简单工厂模式一个工厂,当添加一个产品的时候,需要破坏工厂的方法违反开闭原则。//car/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/27 0027 16:16 */public interface Car { void name();}//Teslapackage BFactory.simple;/** * @Author Zhou原创 2020-06-27 17:49:21 · 127 阅读 · 0 评论 -
单例模式
文章目录单例模式的实现饿汉式懒汉式 --DCL+volitale静态内部类枚举实现单例模式的实现饿汉式构造函数私有化迫不及待创建静态对象公有方法返回对象package ASingleTon;/** * @Author Zhou jian * @Date 2020 ${month} 2020/6/26 0026 20:58 * 饿汉式单例 * 可能会浪费空间 */public class Hungry { //可能会浪费大量的内存空间 privat原创 2020-06-26 23:48:23 · 135 阅读 · 0 评论