首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式?我怎么能理解他们

设计模式是一种解决软件设计问题的经验总结,它提供了一套被广泛接受的解决方案,用于解决在软件开发过程中常见的设计难题。设计模式可以帮助开发人员更好地组织和管理代码,提高代码的可读性、可维护性和可扩展性。

设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。

  1. 创建型模式:用于创建对象的模式,包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。这些模式关注对象的创建过程,通过封装对象的创建逻辑,提高代码的灵活性和可复用性。
  • 工厂模式:通过一个工厂类来创建对象,隐藏了对象的创建细节,提供了一种统一的接口来创建对象。推荐的腾讯云产品:云函数(https://cloud.tencent.com/product/scf
  • 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。推荐的腾讯云产品:云数据库 MySQL(https://cloud.tencent.com/product/cdb
  • 单例模式:确保一个类只有一个实例,并提供一个全局访问点。推荐的腾讯云产品:云服务器(https://cloud.tencent.com/product/cvm
  • 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。推荐的腾讯云产品:云原生容器服务(https://cloud.tencent.com/product/tke
  • 原型模式:通过复制现有对象来创建新对象,避免了对象的重新初始化过程。推荐的腾讯云产品:云硬盘(https://cloud.tencent.com/product/cbs
  1. 结构型模式:用于处理类或对象之间的组合关系,包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式和享元模式。这些模式关注对象之间的组织方式,提供了一种灵活的组织结构,使得系统更易于扩展和维护。
  • 适配器模式:将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。推荐的腾讯云产品:云函数(https://cloud.tencent.com/product/scf
  • 装饰器模式:动态地给一个对象添加额外的职责,同时又不改变其结构。推荐的腾讯云产品:云数据库 Redis(https://cloud.tencent.com/product/redis
  • 代理模式:为其他对象提供一种代理以控制对这个对象的访问。推荐的腾讯云产品:云服务器(https://cloud.tencent.com/product/cvm
  • 外观模式:为子系统中的一组接口提供一个统一的接口,使得子系统更易于使用。推荐的腾讯云产品:云原生容器服务(https://cloud.tencent.com/product/tke
  • 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化。推荐的腾讯云产品:云硬盘(https://cloud.tencent.com/product/cbs
  • 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。推荐的腾讯云产品:云数据库 MongoDB(https://cloud.tencent.com/product/cos
  • 享元模式:运用共享技术有效地支持大量细粒度的对象,提高系统的性能和内存利用率。推荐的腾讯云产品:云函数(https://cloud.tencent.com/product/scf
  1. 行为型模式:用于描述对象之间的通信方式和协作关系,包括观察者模式、模板方法模式、策略模式、责任链模式、命令模式、状态模式、访问者模式、迭代器模式、中介者模式和备忘录模式。这些模式关注对象之间的交互方式,提供了一种灵活的交互机制,使得系统更易于扩展和维护。
  • 观察者模式:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。推荐的腾讯云产品:云函数(https://cloud.tencent.com/product/scf
  • 模板方法模式:定义了一个操作中的算法框架,将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。推荐的腾讯云产品:云数据库 MySQL(https://cloud.tencent.com/product/cdb
  • 策略模式:定义了一系列的算法,并将每个算法封装起来,使得它们可以互相替换,使得算法的变化独立于使用算法的客户。推荐的腾讯云产品:云服务器(https://cloud.tencent.com/product/cvm
  • 责任链模式:将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。推荐的腾讯云产品:云原生容器服务(https://cloud.tencent.com/product/tke
  • 命令模式:将一个请求封装成一个对象,从而使得可以用不同的请求对客户进行参数化。推荐的腾讯云产品:云硬盘(https://cloud.tencent.com/product/cbs
  • 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。推荐的腾讯云产品:云数据库 Redis(https://cloud.tencent.com/product/redis
  • 访问者模式:表示一个作用于某对象结构中的各元素的操作,使得可以在不改变这些元素的类的前提下定义新的操作。推荐的腾讯云产品:云服务器(https://cloud.tencent.com/product/cvm
  • 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。推荐的腾讯云产品:云原生容器服务(https://cloud.tencent.com/product/tke
  • 中介者模式:用一个中介对象来封装一系列的对象交互,使得对象之间不再直接交互,从而降低了耦合度。推荐的腾讯云产品:云硬盘(https://cloud.tencent.com/product/cbs
  • 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将该对象恢复到原先保存的状态。推荐的腾讯云产品:云数据库 MongoDB(https://cloud.tencent.com/product/cos

设计模式的应用场景非常广泛,无论是前端开发、后端开发还是移动开发,都可以使用设计模式来提高代码的质量和可维护性。设计模式在软件开发领域中被广泛应用,例如在Web开发中,可以使用观察者模式实现前端组件之间的通信;在后端开发中,可以使用工厂模式来创建对象;在移动开发中,可以使用策略模式来实现不同的业务逻辑。

设计模式的优势在于提供了一套经过验证的解决方案,可以减少开发人员的工作量,提高代码的可读性和可维护性。通过使用设计模式,开发人员可以更好地组织和管理代码,降低系统的复杂性,提高开发效率。

总结起来,设计模式是一种解决软件设计问题的经验总结,通过提供一套被广泛接受的解决方案,帮助开发人员更好地组织和管理代码,提高代码的可读性、可维护性和可扩展性。设计模式分为创建型模式、结构型模式和行为型模式,每种模式都有其特定的应用场景和优势。在实际开发中,根据具体的需求和问题,选择合适的设计模式可以提高开发效率和代码质量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

谈谈设计模式理解

能把抽象难懂的设计模式讲的通俗易懂、妙趣横生的很少。 设计模式玄吗觉得它玄,也不玄! 怎么讲呢?《孙子兵法》玄不玄?也玄!因为芸芸众生中能看懂悟透的人很少,能真正灵活应用的人更少!...因此它比较抽象,没有一定的编程经验很难读懂,更不能理解其精髓。所以很多人觉得它玄,但真正的架构师和优秀的程序员,几乎没有不看设计模式的。能把设计模式应用的如火纯青的,那就是大神。...设计模式之间的区分,要更多地从我们含义和应用场景去区别,而不应该从他们的类图结构来区分。 看策略模式、状态模式、桥接模式这三种模式的类图几乎是完全一样的(如下图)。 ? 策略模式 ?...状态模式 ? 桥接模式 从面向的对象的继承、多态、封装的角度来分析,他们是完全一样的。但他们的实际应用场景却不同、侧重点不同。...编程思想的三重境界所以有人说:设计模式这东西很虚! 要说,它确实也虚! 如果它看得见摸得着,那我就没必要讲了。

1.2K40

对软件设计模式理解

记性没有好和差,关键在于理解。 软件设计模式的概念及意义 软件设计模式是对软件设计经验的总结,是对软件设计中反复出现的设计问题的成功解决方案的描述。...解决方案描述了设计的细节,通常会给出方案的原理图示(例如 UML 的类图,序列图等,也可能是一些示意图)及相关文字说明,如果可能,还会给出一些代码示例,以便对解决方案的深入理解。...总之,设计模式可以帮助设计者更快更好的完成软件系统的设计工作。 软件设计模式的分类 不同领域总结出的软件设计模式其分类也各不相同,下表给出了常见的软件设计模式的分类。...适配与扩展‍‍ 基本模式 模态行为 资源管理 数据库访问 下面主要介绍较为基本的面向对象设计模式,如上表所示,面向对象设计模式可分为三类,分别为创建型模式,结构型模式和行为型模式...对软件设计模式理解 (1)简单工厂方法模式:一个工厂生产多个产品,只有一个工厂。Python设计模式(1):简单工厂方法模式 (2)工厂方法模式:一个工厂生产一个产品,有多个工厂。

1.1K30

设计模式 - 谈谈对面向对象的理解

引言 面向对象简述 封装 继承 多态 使用面向对象的优点 引言 今年的第一本书阅读了王争(@小争哥)的《设计模式之美》,读后感觉受益匪浅。...要学习好设计模式,首先需要深刻理解面向对象,本文将深入浅出地介绍面向对象的编程的思想和我的一些理解。同时这里也表达一下对把这本好书赠予的韩骏韩老师的感谢。...那么我们怎么理解多态呢?觉得一种比较好的方式是将子类理解为父类加持有自己独特的东西。...面向对象能够帮助我们提升设计代码的能力 面向对象具有的三大特性可以实现非常多而复杂的设计思路,同时它也是设计模式的基础。只有充分理解了面向对象,才能继续学习设计模式。...这就需要我们对面向对象特性、设计原则和设计模式有足够的了解。这些是沉淀了几十年的软件开发人员智慧的结晶,经过了无数次生产实践的锤炼,能够解决很多具体的问题。

32640

设计模式这样学习设计模式-工厂模式

---- 工厂模式 工厂模式是用来创建对象的一种最常用的设计模式。根据抽象程度的不同可以分为:简单工厂模式,工厂方法模式 和 抽象工厂模式。...可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象 先借助一个图来理解产品族和产品等级 的咖啡厅一共有三种咖啡,美式,拿铁,卡布奇诺。...由于我明智的放弃了前端,选择了星巴克,赚了很多钱,这个时候决定再开一家咖啡厅,名字叫瑞幸。咖啡的品类和星巴克一样。 产品等级:即产品的继承结构,可以理解为不同家的同一产品。...究竟用哪种设计模式更适合,这要根据具体的业务需求来决定。不要学会了用刀,就见什么都砍。...小伙伴们觉的对你有帮助的请点赞支持一下,感觉写的不错的请关注一下专栏 适合前端人员的设计模式 参考 web前端-js设计模式 三大工厂模式的优缺点

50430

设计模式这样学习设计模式-单例模式

类图 简单单例模式 一个类可以创建多个实例,并且每个实例之间都不相等 class Window { constructor() {} } let w1 = new Window(); let...透明单例模式 使用者不知道要按照单例使用,还是会使用new来调用构造函数从而发生错误,那么为了解决这个问题,我们通过下面这种方式,还是使用new的方式创建对象,但返回的都是同一个实例。...createInstance(); window1.hello(); console.log(window1 === window2) 封装变化 上面的例子createInstance只能创建Window的实例,希望...res.json(user); }); } }); app.listen(3000); 小伙伴们觉的对你有帮助的请点赞支持一下,感觉写的不错的请关注一下专栏 适合前端人员的设计模式...参考 web前端-js设计模式

24630

设计模式的通俗理解--代理模式

前言 在上一篇文章收尾部分提到过,设计模式按照功能性分为三类:创建类、结构类、行为类。...创建类设计模式应用于创建对象这一步,包含工厂模式、单例模式、建造者模式、原型模式,通过之前的四篇文章已经全部介绍完。...从本篇开始介绍结构类设计模式,在创建类模式创建好对象之后,结构类模式的作用是负责对代码作结构优化以及解耦。下面开始介绍结构类第一种--代理模式。 本文能为读者创造的价值: 1....代理的实现方式 掌握设计模式的三个过程: 理解:通过本文理解设计模式 识别:阅读代码的时候能够识别出应用了哪种设计模式 应用:当接到业务的时候,能够反应出可以应用哪种设计模式并加以实现(读者想要达到这个程度...其实动态代理并没有说完(上面说的是支持接口的动态代理,如果非接口想实现动态代理则需要通过CGLIB实现),不过鉴于今天的内容多且复杂, 且CGLIB并不常用,所以以后有机会再说。

24620

设计模式的通俗理解--工厂模式

理解什么是工厂模式 2. 提取源码中的工厂模式应用,提升源码阅读能力 3. 为读者工作中的业务代码设计提供编程设计思路,提升读者的代码质量 4....) 掌握设计模式的三个过程: 理解:通过本文理解设计模式 识别:阅读代码的时候能够识别出应用了哪种设计模式 应用:当接到业务的时候,能够反应出可以应用哪种设计模式并加以实现(读者想要达到这个程度,需要反复重复...看到这里,其实读者应该已经大概理解,工厂模式是在简单工厂的基础上,将具体工厂的实例化作抽象选择 ? 在文章开头提到过,读者想要有所收获的前提是:坚持看完 ?...产品族,产品族的说明图放在了最下面),这就是抽象工厂模式设计思路,看代码: ?...,设计模式一共有二十三种,如果用一篇文章全部讲完其实并不利于读者消化,我会把它做成一个系列的文章,陆续给读者发布 下期预告:《设计模式的通俗理解--单例模式》 (浩说编程, ?

39230

简化理解:策略设计模式

这是参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情 ---- 就在前不久,我们讲了创建对象的 3 种常见设计模式:工厂设计模式、构造函数设计模式、原型设计模式(蓦然回首,“工厂、...构造、原型”设计模式,正在灯火阑珊处)。...这 3 种设计模式,真切时刻发生在我们日常编码生活中,蓦然回首,灯火阑珊处。 本篇带来另外一种设计模式介绍,你或许天天和它打交道,但是不认识它,它就是“策略模式”。...如果你的代码有很多 if…else… 判断,各判断里的代码又相互独立,可考虑使用策略模式,封装各判断的代码,用 map 的方式,取出你的锦囊妙计吧 策略模式,就这,原来设计模式就在我们身边~~ 参考:...点赞关注评论,为好文助力 是掘金安东尼 100 万阅读量人气前端技术博主 INFP 写作人格坚持 1000 日更文 ✍ 关注,陪你一起度过漫长编程岁月

17220

设计模式这样学习设计模式-发布订阅者模式

---- 发布-订阅者模式 虽然你可能还不熟悉 发布-订阅者 模式,但你肯定已经用过它了。因为 发布-订阅者 模式在前端领域可谓是无处不在。...为什么这么说呢,因为 EventTarget.addEventListener() 就是一个 发布-订阅者 模式。先卖个关子,看完本文你就能理解了。...一个例子理解 普通程序员张三去书店买书 张三:请问有红宝书吗? 店员:没有。 一小时后····· 张三:请问有红宝书吗? 店员:没有。 一小时后····· 张三:请问有红宝书吗?...李四:要订阅(on)这本书,当书有货的时候,请给我打电话(emit),就会过来买书(message)。如果在其它地方买到书了,请取消订阅(off)。...参考 web前端不可不掌握的核心设计模式:发布订阅者模式(附实战) 小伙伴们觉的对你有帮助的请点赞支持一下,感觉写的不错的请关注一下专栏 适合前端人员的设计模式

58430

理解的接口设计

将从下面的方向来对理解的接口设计做个总结: 接口参数定义 -> 接口版本化的问题 -> 接口的安全性 -> 接口的代码设计 -> 接口的可读性 -> 接口文档 -> 遇到的坑 接口参数定义 接口设计中往可以抽象出一些新的公共参数...曾经也去调研了很多关于接口版本化的资料和设计,最后得到的结论大致如下: 接口的版本区分为: 大版本 原则:大版本的数量最多控制到5个以内(个人跟倾向于3个),超过版本限制的版本提示升级到新版本 方案...v=1.1 接口的安全性 接口的设计肯定绕不开安全这两个字,为了达到尽可能的安全,我们需要尽可能的增加被攻击的难度,以下是了解和使用到的一些常见的手段去增加接口的安全性(https这里就不讨论了):...-> 解耦业务 即插即用 这个过程的关键字:抽象成类 前置中间件 注入 接着就是我们代码设计的层面了,如何抽象公共的部分与业务代码解耦。...关于接口设计可读性的的一些思考: url 非RESTFUL: 资源/资源/操作(动词), 例如 content/article/get -> 获取内容资源下的一篇文章资源 RESTFUL: 资源/资源

90080

理解的接口设计

将从下面的方向来对理解的接口设计做个总结: 接口参数定义 -> 接口版本化的问题 -> 接口的安全性 -> 接口的代码设计 -> 接口的可读性 -> 接口文档 -> 遇到的坑 接口参数定义 接口设计中往可以抽象出一些新的公共参数...曾经也去调研了很多关于接口版本化的资料和设计,最后得到的结论大致如下: 接口的版本区分为: 大版本 原则:大版本的数量最多控制到5个以内(个人跟倾向于3个),超过版本限制的版本提示升级到新版本 方案...v=1.1 接口的安全性 接口的设计肯定绕不开安全这两个字,为了达到尽可能的安全,我们需要尽可能的增加被攻击的难度,以下是了解和使用到的一些常见的手段去增加接口的安全性(https这里就不讨论了):...-> 解耦业务 即插即用 这个过程的关键字:抽象成类 前置中间件 注入 接着就是我们代码设计的层面了,如何抽象公共的部分与业务代码解耦。...关于接口设计可读性的的一些思考: url 非RESTFUL: 资源/资源/操作(动词), 例如 content/article/get -> 获取内容资源下的一篇文章资源 RESTFUL: 资源/资源

67270

理解的接口设计

将从下面的方向来对理解的接口设计做个总结: 接口参数定义 -> 接口版本化的问题 -> 接口的安全性 -> 接口的代码设计 -> 接口的可读性 -> 接口文档 -> 遇到的坑 接口参数定义 接口设计中往可以抽象出一些新的公共参数...曾经也去调研了很多关于接口版本化的资料和设计,最后得到的结论大致如下: ?...接口的安全性 接口的设计肯定绕不开安全这两个字,为了达到尽可能的安全,我们需要尽可能的增加被攻击的难度,以下是了解和使用到的一些常见的手段去增加接口的安全性(https这里就不讨论了): 过期验证/签名验证...接口的代码设计 -> 解耦业务 即插即用 这个过程的关键字:抽象成类 前置中间件 注入 接着就是我们代码设计的层面了,如何抽象公共的部分与业务代码解耦。...关于接口设计可读性的的一些思考: ? ? 接口文档 好的接口文档就是生产力, swagger + api blueprint 自行google吧?

56020

深入理解 设计模式之工厂模式

工厂模式体现了程序设计中的: 依赖倒转原则 (抽象依赖抽象,在抽象工厂模式中有体现) 最小知识原则? (客户只和工厂打交道) 不知名原则: 以代码量换取扩展性 (俺自己起的不行嘛.....)...站在客户的角度,工厂模式是简约的;站在开发者的角度,工厂模式是繁琐的。相比于简单工厂模式,工厂方法模式扩展性更强,是以代码量换取扩展性。...感觉这是面向过程思考出的结果,如果只是面向对象,很难将对象抽象出工厂模式。 简单工厂模式 要素:具体工厂类,抽象产品类,具体产品1类,具体产品2类。...但是抽象工厂模式不是为了解决这个问题滴(是这么理解的,欢迎纠错)。...比如 想买 巧克力饼干,希望有一个巧克力饼干工厂,这个工厂同时依赖巧克力类,饼干类(前两种模式中工厂只依赖一种产品类,此处依赖多种产品类),提供生产巧克力和生产饼干的接口。

28300

设计模式的通俗理解--原型模式

理解什么是原型模式 2. 原型模式的两种实现方式 3....原型模式设计思路 掌握设计模式的三个过程: 理解:通过本文理解设计模式 识别:阅读代码的时候能够识别出应用了哪种设计模式 应用:当接到业务的时候,能够反应出可以应用哪种设计模式并加以实现(读者想要达到这个程度...,需要反复重复“识别”的过程) 什么是原型模式 原型模式实现很简单,对于读者来说很好理解,所以本篇内容不会很长,原型模式的本质和 ctrl c+ctrl v差不多,愿称之为:克隆(后面都用此称呼代指原型模式...在了解这两种方式之前,读者需要了解一个知识点:基本数据类型和引用数据类型在内存中的存储方式(知道的读者可以直接跳过这一块),先做个说明: jvm在运行代码的时候会将内存分为五个区域:寄存区、本地方法区...现在要跟读者说的是,这四种按照设计模式的归类来说同属于创建类设计模式(创建对象),读者可以回顾一下,做个总结。其他两种则是结构类、行为类。下一期开始介绍结构型设计模式

28320

快速理解设计模式之创建型模式

要想更全面理解设计模式,建议先查看Spring的设计模式快速入门干货,前半部分是设计模式的分类和综述,与Spring无关。...这里有6个具体的创建型模式可供研究,它们分别是: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 建造者模式...(Builder) 原型模式(Prototype) 单例模式(Singleton) 说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。...GoF在《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类。...一段代码就可以理解这个模式了: public class Director { public Product constructProduct(ConcreteBuilder concreteBuilder

57460

设计模式的通俗理解--建造者模式

理解什么是建造者模式 2. 了解建造者模式的应用场景 3. 建造者模式的实现方式 4....建造者模式设计思路 掌握设计模式的三个过程: 理解:通过本文理解设计模式 识别:阅读代码的时候能够识别出应用了哪种设计模式 应用:当接到业务的时候,能够反应出可以应用哪种设计模式并加以实现(读者想要达到这个程度...,需要反复重复“识别”的过程) 所谓建造者模式 本着让读者一看就懂的写作理念,这里并不打算用官方那种难以理解的概念去解释建造者模式。...(为了举例子所以只做了一个赋值操作,可能会让读者觉得这层有点鸡肋,其实不然) 到这里建造者模式就讲完了,相比之前的工厂模式和单例模式,建造者模式内容较少,读者也更好理解。...下期预告:《设计模式的通俗理解--原型模式》 (浩说编程, ? 要想发量稳得住,点赞收藏加关注 ? )

21920

设计模式的通俗理解--单例模式

理解什么是单例模式 2. 单例模式的解决的问题 3. 单例模式设计思路 4....单例模式的三种实现方式,以及各种方式的优缺点 掌握设计模式的三个过程: 理解:通过本文理解设计模式 识别:阅读代码的时候能够识别出应用了哪种设计模式 应用:当接到业务的时候,能够反应出可以应用哪种设计模式并加以实现...(读者想要达到这个程度,需要反复重复“识别”的过程) 单例模式的由来 看名字很好理解:单例-单个实例。...读者想要理解这种写法的优点,需要先了解两个知识点(这里涉及到jvm的类加载机制,如果细说的话可能需要单独写一篇文章,这里先做个记录,以后会出,先说一下结论): 1、外部类加载的时候,静态内部类是不会被加载的...保证了线程安全 至此,单例模式的所有内容已经讲完。如果你看到了这里,说明你已经深入理解了单例模式

38530

通俗理解设计模式之工厂模式(一)

今天开始,慢慢和大家一起分享学习和理解设计模式的历程。前言设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。...1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式...让我们从创建型模式开始。先来说说工厂模式!基本介绍工厂模式是一种创建型的面向对象设计模式,目的将创建对象的具体过程包装起来,从而达到更高的灵活性。...)今天来看下工厂模式之简单工厂模式图片简单工厂模式简单工厂模式(Simple Factory)又叫做静态工厂方法(Static Factory Method)模式,但不属于 23 种 GOF 设计模式之一...为了解决这些缺点,就有了工厂方法模式下回再讲工厂方法,今天先到这里了!

20200

用过的设计模式(6)-- 门面模式

[在这里插入图片描述] 知道,这张图也看不明白在讲什么。 门面模式的定义已经呼之欲出了:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。...门面模式提供一个高层次的接口,使得子系统更易于使用。 优点:高内聚,松耦合。安全,不通过门面上提供的方法,休想访问模块内部。 -------- 说说是如何在项目中使用这个模式的吧。...门面模式是个很好的模式,很符合面向接口编程,遵守了依赖倒置原则、迪米特法则等,当然,有些书说违背了开-闭原则,个人认为,门面模式并不妨碍拓展,只要把基类抽取好,新功能只需要继承或依赖与基类即可。...同时,外观模式虽然提供了一个统一的入口,但并不妨碍用户直接使用子系统,使用更加复杂的功能。当然,凡事有利必有弊,外观设计模式存在什么问题呢?...其次,外观模式实际上违背了设计模式中的开闭原则,如果我们要修改业务逻辑,常常业务方也需要进行代码修改。那么,什么样的情况下适合使用外观模式呢?

27200
领券