设计模式
文章平均质量分 72
让程序飞
偏好Java、Linux... 努力做更好的自己 Go ahead...
展开
-
简单工厂模式
前言定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程示例以饮料加工厂为例1. 创建饮料接口(或者抽象类)public interface Drink { void production();...原创 2021-03-17 11:56:23 · 175 阅读 · 0 评论 -
GoF设计模式(一) - 工厂方法模式
前言1. 定义工厂方法模式是为了弥补简单工厂模式的不足并且继承它的优点而延生出的一种设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品2. 简介将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类3. 角色结构抽象工厂(Creator)角色是工厂方法模式的核心,与应用程序无关。任..原创 2021-03-17 19:56:36 · 135 阅读 · 0 评论 -
GoF设计模式(二) - 抽象工厂模式
前言提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。示例1. 饮料制作public interface Drink { void production();}public class ColaDrinkProducti...原创 2021-03-20 18:01:41 · 166 阅读 · 0 评论 -
GoF设计模式(三) - 单例模式的六种写法
前言单例模式属于创建型模式,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。1. 懒汉式public class SluggardSingleton { private static SluggardSingleton sluggardSingleton; private SluggardSingleton(){} public static SluggardSingleton..原创 2021-04-23 11:59:04 · 125 阅读 · 0 评论 -
GoF设计模式(四) - 建造者模式
前言建造者(Builder)模式’,又叫生成器模式。建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。建造者模式的四个角色1)Product(产品角色):一个具体的产品对象。【提供产品属性以及set、get方法】2)Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。【定义成品需要的材料.原创 2021-04-24 14:39:30 · 143 阅读 · 0 评论 -
GoF设计模式(五) - 原型模式(浅复制与深复制)
前言原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能,通俗来讲就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节,这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。1. 浅复制 创建Student对象实现Cloneable接口重写clone()方法@ToStringpublic class Student implements Cloneable{ //姓名 ...原创 2021-04-25 15:38:50 · 125 阅读 · 0 评论 -
GoF设计模式(六) - 适配器模式
前言适配器模式(Adapter):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能,适配器模式分为类适配器模式和对象适配器模式。角色Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心。Adaptee(适配者类):适配者即被.原创 2021-05-11 19:34:32 · 170 阅读 · 1 评论 -
GoF设计模式(七) - 装饰者模式
前言装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。装饰者模式分为如下几个部分:(1)Component:主体(装饰的主体是什么)(抽象的的构建对象)(2)ConcreteComponent:抽象构件对象的子类,用来定义具体的构件对象(3)Decorator:装饰者,继承了Component,从外类来扩展Component类的功能(4)ConcreteDecorator:具体装饰类,实现了抽象装饰类,负责构...原创 2021-10-20 10:11:14 · 143 阅读 · 0 评论 -
GoF设计模式(八) - 代理模式
代理模式属于结构型模式,为其他对象提供一种代理以控制对这个对象的访问。Subject 类,定义了RealSubject 和Proxy 的共用接口,这样就在任何使用RealSubject 的地方都可以使用Proxy。代理模式上,基本上有Subject角色,RealSubject角色,Proxy角色。其中:Subject角色负责定义RealSubject和Proxy角色应该实现的接口;RealSubject角色用来真正完成业务服务功能;Proxy角色负责将自身的Request请求,调用realsub原创 2021-05-24 17:56:07 · 144 阅读 · 1 评论 -
GoF设计模式(九) - 外观模式
前言外观模式(Facade),提供一个高层次的接口,隐藏系统的复杂性,使得子系统更易于使用。具体实现子系统类 :public class SubSystemA { public void methodA(){ System.out.println("执行子系统方法A"); }}public class SubSystemB { public void methodB(){ System.out.pri...原创 2021-12-14 15:10:40 · 509 阅读 · 0 评论 -
GoF设计模式(十) - 桥接模式
前言桥接(Bridge)是将抽象部分与它的实现部分分离,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。场景以汽车销售为例 ,会有汽车品牌和汽车类型,如何实现分类销售 ? 我们可以用多继承结构的方式来实现。按品牌分类实现结构图:这样实现的话,会存在扩展性问题并且违反了单一职责原则,当我们新添加一个品牌(长安),我们是不是又要在改品牌下增加两种汽车类型呢?假如我们在增加一个汽车类型(混动车),我们就要在各汽车...原创 2021-05-27 14:23:49 · 223 阅读 · 13 评论 -
GoF设计模式(十一) - 组合模式
前言组合模式(Composite Pattern),将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。组合模式主要包含三种角色:抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性; 树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构; 叶子节点(Leaf):叶..原创 2022-02-08 17:11:53 · 332 阅读 · 0 评论 -
GoF设计模式(十二) - 享元模式
前言享元x模式(Flyweight Pattern)运用共享技术有效地支持大量细粒度的对象,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。模式所涉及的角色Flyweight: 享元接口,通过这个接口传入外部状态并作用于外部状态; ConcreteFlyweight: 具体的享元实现对象,必须是可共享的,需要封装享元对象的内部状态; UnsharedConcreteFlyweight: 非共享的享元实现对象,并不是.原创 2022-02-11 10:36:33 · 499 阅读 · 0 评论 -
GoF设计模式(十三) - 策略模式
前言策略模式属于行为型模式,是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。组成环境类(PayContext): 维护一个对PayStrategy对象的引用。抽象策略类(PayStrategy): 定义所有支持的算法的公共接口或抽象类具体策略类(AliPayStrategy、JdPayStrategy、WechatPayStrategy): 封装了具体的算法或行为,继承于P.原创 2021-04-30 17:55:44 · 198 阅读 · 1 评论 -
GoF设计模式(十四) - 模版方法模式
前言模板模式(Template Pattern),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。模式所涉及的角色1)抽象类/抽象模板(Abstract Class)抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。② 基本方法:是整个算法中的一个..原创 2022-02-16 13:47:57 · 407 阅读 · 0 评论 -
GoF设计模式(十五) - 观察者模式
前言观察者模式(Observer Pattern)指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式属于行为型模式。模式所涉及的角色抽象主题(Subject):也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。 具体主题(Concrete Subject):也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察...原创 2022-02-18 16:09:51 · 469 阅读 · 0 评论 -
GoF设计模式(十六) - 迭代器模式
前言迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。该模式属于行为型模式。模式所涉及的角色抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。 抽象迭代器:定义.原创 2022-03-16 15:08:01 · 178 阅读 · 0 评论 -
GoF设计模式(十七) - 责任链模式
前言责任链模式(Chain of Responsibility Pattern)避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。这种类型的设计模式属于行为型模式。模式所涉及的角色抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该.原创 2022-03-17 14:08:23 · 251 阅读 · 0 评论