23种设计模式
小目标一个亿
这个作者很懒,什么都没留下…
展开
-
23种设计模式-行为型-模板模式
定义 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变算法结构的情况下重新定义该算法的某些特定步骤。 主要解决 一些方法通用,却在每一个子类都重写了这一方法。 何时使用 有一些通用的方法。 如何解决 将这些通用算法抽象出来;在抽象类实现,其他步骤在子类实现; 应用实例 在建造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有装修的差异。 优点 封装不变的部分...原创 2022-04-23 22:46:47 · 2112 阅读 · 0 评论 -
23种设计模式-结构型(关注类与类之间的关系)-总结
7种结构型设计模式,关注类与类之间的关系,其实就是折腾组合与继承,(组合优于继承)为程序提供更好的灵活性和扩展性。 单个类没有任何意义,面向对象决定了类和类之间的各种关系:纵向,层级关系-继承、实现;横向,平级关系-组合、聚合、关联、依赖。 ...原创 2022-04-23 22:31:33 · 2183 阅读 · 0 评论 -
23种设计模式-结构型-享元模式
定义 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 使用场景 活字印刷术、共享单车、共享充电宝、线程池;系统中有大量对象、这些对象消耗大量内存、这些对象的状态大部分可以外部化、系统不依赖于这些对象身份,这些对象是不可分辨的。 作用 运用共享技术有效地支持大量细粒度的对象。 主要解决 在有大量对象时,有可能会造成内存中有,则返回这个...原创 2022-04-23 22:27:11 · 2116 阅读 · 0 评论 -
23种设计模式-结构型-组合模式
定义 也叫部分整体模式,将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问。 实现方式 透明方式-不区分有没有子节点,叫透明方式,最省事; 安全方式-就要区分节点性质,使用更安全,但是也麻烦; 主要解决 它在我们树形结构的问题种,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样处理复杂元素,从而使得客户端程序与复杂元素的内部结构解耦。 何时使用 ...原创 2022-04-23 22:13:12 · 2112 阅读 · 0 评论 -
23种设计模式-结构型-桥接模式
定义 将抽象与实现分离,使它们可以独立变化,它是用组合关系替代继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度;A里面有多个变化元素B/C/D,把变化元素做成抽象,方便扩展。 使用场景 某个类里面,如果有2个元素是独立变化的,都可能扩展,就用桥接模式,比如日志类,日志写到哪里(文本/数据库/分布式),日志的环境(开发/测试/预发布/生产);就是为了减少子类爆炸时,很多变化的子类,不如弄个抽象传入。 主要解决 在有多重可能会变化的情况下,用继...原创 2022-04-23 22:02:45 · 2109 阅读 · 0 评论 -
23种设计模式-结构型-外观模式
定义 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口,向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 作用 把子系统中一组接口封装成一个接口,这个接口使得子系统更加容易使用,降低访问复杂系统的复杂度,简化客户端之间的接口。 如何解决 客户端不与系统耦合,外观类与系统耦合。 关键代码 在客户端和复杂系统之间再加...原创 2022-04-23 21:50:51 · 2084 阅读 · 0 评论 -
23种设计模式-结构型-代理模式
定义 一个类代表另一个类的功能。 什么时候用 访问对象不适合或者不能直接引用目标对象,或者调动过程很复杂,或者就是调用逻辑经常变化,以上情况都适合用代理模式。 如何使用 在访问一个类时做一些控制。 如果解决 增加中间件。 优点 职责清晰、扩展性高。 缺点 优于在客户端和真实主题之间增加了代理对象,所以请求的处理速度会变慢; 实现代理模式需要额外的功能,有些代理模式的实现非常...原创 2022-04-16 15:41:09 · 2414 阅读 · 0 评论 -
23种设计模式-结构型-装饰器模式
定义 允许向一个现有的对象添加新的功能,同时又不改变其结构; 这种模式创建了一个装饰类,用来包装原有的类,并在保持类的完整性的前提下,提供了额外的功能; 类似于AOP面向切面编程,装饰器模式也是一种AOP的实现; 有什么作用 动态地给一个对象添加一些额外的职责。就新增功能来说,装饰器模式相比生成子类更灵活 主要解决问题 通常我们为了扩展一个类习惯使用继承的方式来实现,优于继承为类引入静态特征,并且随着扩展功能的增多子类就越膨胀。 ...原创 2022-04-16 15:23:40 · 2158 阅读 · 0 评论 -
23种设计模式-结构型-适配器模式
定义 作为两个不兼容接口之间的桥梁; 是一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,也叫做包装器; 比如:我买了个港版的手机,在大陆充电的时候需要有一个电源插头转换器,因为港版和国行的电源插头不一样; 能做什么 属于补救模式,是在成型的项目基础上,全新引入新的组件的时候才需要用上。 不能做什么 不能在项目一开始设计的时候就搞适配器,没必要,也是在增加难度。 如何实现适配器模式 ...原创 2022-04-16 15:08:08 · 2062 阅读 · 0 评论 -
23种设计模式-创建型-抽象工厂方法模式
定义 是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需特定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 简单来说,抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个同等级的产品。 与工厂方法的区别 工厂方法创建一个;抽象工厂创建多个;工厂方法+抽象约束=抽象工厂方法; 优点 把对象的创建和使用分离,一个工厂还能创建多个对象,能保障一定能创建产品簇里面全部的...原创 2022-04-16 14:51:42 · 2068 阅读 · 0 评论 -
23种设计模式-创建型(关注对象的创建)-总结
创建型设计模式包括:单例模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式。 有一种普通工厂模式,又叫做静态工厂方法模式,不属于23种设计模式之一,就是因为太简单了。 创建型设计模式主要关注对象的创建:其实就是如何New一个对象的问题,单例和原型主要是对象的复用;三大工厂属于简单的对象创建,为了扩展创建过程;建造者属于复杂对象的创建,为了方便各种配置; 三大工厂(简单工厂、工厂模式、抽象工厂)对比 ...原创 2022-04-16 14:42:53 · 2147 阅读 · 0 评论 -
23种设计模式-创建型-建造者模式
定义 将一个复杂对象的结构与它的表示分离,使同样的构建过程可以创建不同的表示对象。 与工厂模式的区别 建造者模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用; 工厂只负责管理对象的创建,通常比较简单; 建造者管理多部件的构成,管理组装过程,最终才创建出复杂的对象; 应用场景 造车,汽车必备的三大件:发动机、底盘、变速箱,汽车可替换的配件:轮胎、灯、...原创 2022-04-16 14:28:06 · 2060 阅读 · 0 评论 -
23种设计模式-创建型-原型模式
定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,也就是利用对象Copy,快速创建对象。 作用 用于创建重复的对象,同时又能保证性能;既能快速获得对象实例,又能让对象之间保证性能。 实现方式 浅拷贝:利用MemberwiseClone,只拷贝引用,不走构造函数,直接内存拷贝产生新的对象,所以也有性能损失; 深拷贝:利用序列化实现深拷贝,把引用的地址重新赋值,不仅拷贝引用,还拷贝了引用类型的值; ...原创 2022-04-16 14:16:18 · 2088 阅读 · 0 评论 -
23种设计模式-创建型-工厂方法模式
定义 定义一个抽象工厂,定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。 解决的问题 解决了简单工厂集中依赖的问题,将创建和使用相分离。 应用场景 简单工厂遇到困境,工厂类太多依赖,直接拆分。 工厂方法设计模式实现 将对象的创建和使用分离、将简单工厂的依赖集中问题给解决了。 优点 依赖抽象编程,支持开闭原则;将创建对象转移到了工厂。 缺点 代码多;好像没啥意义,就是...原创 2022-04-16 14:08:16 · 2193 阅读 · 0 评论 -
23种设计模式-创建型-单例模式
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点,就是整个进程有且仅有一个实例,该类负责创建自己的对象,同时确保只有一个对象被创建,结构最简单的设计模式没有之一。 创建方式 懒汉式:需要主动调用创建实例的方法,否则不会实例化,在没有使用时,可以延迟实例化。 饿汉式:静态构造函数,只要使用该类型,都会实例化对象。 应用场景 线程池、数据库连接池; 配置文件对象、IOC容器实例; 缓存,比如...原创 2022-04-16 14:01:04 · 2344 阅读 · 0 评论