facade

设计模式学习笔记(十三):外观模式

倾然丶 夕夏残阳落幕 提交于 2020-08-18 07:50:32
1 概述 1.1 引言 根据单一权责原则,软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,使客户类与子系统之间的通信和相互依赖关系达到最小,方法之一就是引入一个外观角色,为子系统的访问提供一个简单而单一的入口。外观模式通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。 (这里的子系统是广义的概念,可以是一个类,一个功能模块,系统的一个组成部分或者一个完整的系统) 如果没有外观角色,每个客户端可能需要和多个子系统之间进行复杂的交互,系统的耦合度很大,简化示意图如下: 而引入外观角色后,客户端只需直接与外观角色交互,客户端与子系统之间的原有复杂度由外观角色实现,从而降低系统耦合度,简化示意图如下: 外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观角色进行,外观角色将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。 1.2 定义 外观模式:外部与一个子系统的通信通过一个统一的外观角色进行,为子系统中的一组接口提供一个一致的入口。 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又叫门面模式,是一种对象结构型模式。 1.3 结构图 1.4 角色 Facade(外观角色):在客户端可以调用这个角色的方法

设计模式之7个结构型模式

こ雲淡風輕ζ 提交于 2020-08-17 15:24:40
结构型模式概述 结构型模式(Structural Pattern) 描述 如何将类或者对象结合在一起形成更大的结构 ,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式概述 结构型模式可以分为 类结构型模式 和 对象结构型模式 类结构型模式关心类的组合 ,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是 对象结构型模式 。 适配器模式(Adapter) 桥接模式(Bridge) 组合模式(Composite) 装饰模式(Decorator) 外观模式(Facade) 享元模式(Flyweight) 代理模式(Proxy) 1适配器模式 把客户类的请求转化为对适配者的相应接口的调用 1.1 优点 将目标类和适配者类解耦 ,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。 增加了类的透明性和复用性 ,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。 灵活性和扩展性都非常好 ,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”

设计模式-总揽

六眼飞鱼酱① 提交于 2020-08-15 03:28:36
Dessign Pattern Overview 目录 Dessign Pattern Overview Overview Core Concepts Design Principle Refactoring to Patterns GOF-23 Encapsulate Change Overview 在 软件工程 中, 设计模式 (design pattern)是对 软件设计 中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希·伽玛 (Erich Gamma)等人在1990年代从 建筑设计 领域引入到 计算机科学 的。 设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类别 或 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 引用自维基百科 Core Concepts 变化是复用的天敌,本质是找到变化,封装变化,提高可复用性 如果一个系统所有点都在变化或者一直不变,是不能用设计模式来解决的 Design Principle 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应当依赖于抽象(稳定) 抽象(稳定

【设计模式】设计模式(一)-- 大话设计模式读书笔记

陌路散爱 提交于 2020-08-14 09:25:07
设计模式是面向对象的最佳实践(代码无错未必优) (适度封装,合理继承,结构多态) =》降耦合; 整体已维护,易复用,可扩展 =》灵活度; 面向对象的好处:可维护,可扩展,可复用,灵活性好; 面向对象的标志:依赖倒转 =》抽象不应该依赖细节,细节应该依赖于抽象=》程序中所有的依赖关系都终止于抽象类或者接口(对象之间的中间者); 面向对象编程原则:开放封闭原则,依赖倒置原则; 1. 简单工厂模式 factory (解决对象创建问题) --计算器,加功能 [工厂模式是定义一个拥有创建对象的接口,让子类决定实例化哪一个类] a、计算器,计算对象工厂 2. 策略者模式 strategy (策略:算法,解决算法创建,使算法变化不影响算法的客户) --商场促销 [策略模式是定义一系列算法的方法,所有算法完成相同的工作,以相同的方式调用所有的算法,减少各种算法类和使用算法之间的耦合,分离算法类简化单元测试。策略模式封装了变化规则-处理变化的可能性,及不同时间应用不同规则。] a、收银软件(工厂+策略) 3. 抽象工厂模式 abstract factory -- -- DB更换 工厂方法模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类。 (提供一个创建一系列相关或互相依赖对应的接口,而无需指定他们具体的类) a、数据库实现更换 抽象工厂模式( Abstract Factory)

高德智慧景区随身听播放器框架设计与实现

吃可爱长大的小学妹 提交于 2020-08-14 01:50:56
一、背景 “远看山有色,近听水‘ 有 ’ 声 ”,景区语音导览是智慧景区重点业务之一,以用地图可以边走边听景区各景点的语音介绍为主要诉求,实现高德智慧景区地图不仅可以看,还可以听,从而使用户交互体验得到跨越式提高。 我们想要让“技术有温度”,让讲解更加有感情和内涵,最好可以通过讲解构造一个“UGC景区讲解生态圈”,并且还能帮助讲解创作者有一定的收益,以达到“生态圈的正向循环”,让线上导游“天下没有难做的生意”。 试想一下,当游客走进故宫,这时,高德地图的语音包可以播放:“故宫有180万件宝贝,青铜馆、陶瓷馆……”这段话的讲解人,是著名收藏家、古董鉴赏家马未都,是不是更加吸引你关注?另外,当你漫步到延禧宫,语音包则会立刻讲一讲延禧宫与大热的电视剧《延禧攻略》有什么关系,并且有背景音插入,是多么生动形象。 所以,我们开发选型并没有采用传统的TTS技术(由文本内容生成机器语音),而是采用了更加通用音频格式(比如mp3),作为讲解的音频输入源,方便讲解者进行二次创作。本文将简单回顾高德智慧景区随身听播放器的框架设计与实现。 二、架构设计前思考 “夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也”,拉开战斗序幕之前我们应该尽量去“庙算”,提前预防和判断并保证技术风险可控,俗称“防火”。“防火”更能看出本事,而“救火”只是能力。开发应尽量做到“不打无准备之仗”。 首先,

设计模式概述

怎甘沉沦 提交于 2020-08-14 01:28:13
一、定义   设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是 为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 二、产生背景   肯特·贝克和沃德·坎宁安在1987年利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口的生成中。一年后Erich Gamma在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时James Coplien 在1989年至1991 年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Idioms。就在这一年Erich Gamma 得到了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns - Elements of Reusable Object-Oriented Software 一书,在此书中共收录了23个设计模式。这四位作者在软件开发领域里也以他们的匿名著称Gang of Four(四人帮,简称GoF),并且是他们在此书中的协作导致了软件设计模式的突破。有时这个匿名GoF也会用于指代前面提到的那本书。 三、学习的意义   设计模式的本质是面向

【译文】【前端架构鉴赏 01】:Angular 架构模式与最佳实践

自作多情 提交于 2020-08-14 01:17:30
本文原文: Angular Architecture Patterns and Best Practices (that help to scale) 译者序 这是作为译者我想说的话,并非原文中的内容。 我猜此时此刻你心里的疑问一定是:为什么是 Angular,不是 React,不是 Vue,不是 Flux,不是 Redux ? 因为你已经对它们太熟悉了。 我个人作为开发者而言最希望是能够汲取到“圈外”的“营养”,这样才能给我的成长带来帮助。 我想对各位也是一样。 你不用担心因为不会 Angular 而看不懂这一些列文章,它们基本上谈论的是应用架构——关于设计、组织、抽象,很少会落到具体的实现,即使有,连蒙带猜也能推测出一二。这也能从侧面说明我衷心想推荐这些佳作的原因:通过大段大段的代码阐述很容易;难的是几乎不用代码来跨越语言的说明更高层次的东西,比如 Martin Fowler, Uncle Bob Martin 他们的文章就能如此。 我不评价框架的流行和好坏,我只是把一切呈现在各位的眼前。它们并非和 Flux,Vuex 大相径庭,反而你们会看到它们的影子,但更多的是不一样的东西。我在里面看到了更好的职责划分和抽象。 在文中我会以引用的格式和“译者注”开头穿插一些我的个人备注和带给我启发性的问题,你可以理解为文章的“评论音轨”,但其中问题我不会给予回答。你也可以忽略这些评论

SpringCloud微服务:基于Nacos组件,整合Dubbo框架

旧城冷巷雨未停 提交于 2020-08-12 20:24:30
源码地址: GitHub·点这里 || GitEE·点这里 一、基础组件简介 1、Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服务下成熟的技术栈,但是Dubbo本身确实是非常优秀的框架。 常见的应用迭代和升级的过程基本如下: 当应用访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。 随着垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。 伴随业务发展,服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。 而Dubbo框架的核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。正好可以解决上述业务发展的痛点。 2、微服务框架 SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线

闲谈设计模式

前提是你 提交于 2020-08-11 02:54:25
闲谈设计模式 Intro 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 了解这些前辈们总结出来的经验有助于帮助你写出来更优秀的代码,帮助你写出可扩展、可读、可维护的高质量代码。 在极客时间里推出了数据结构和设计模式的王争说了一句话,如果说“数据结构与算法之美”是教你写出高效的代码,那设计模式就是教你写出高质量的代码。 为什么要学习设计模式 提升自己代码质量,告别写被人吐槽的烂代码 提高复杂代码的设计和开发能力,设计出扩展性良好,可维护性更强,可复用性更好的代码 让读源码、学框架事半功倍,学会设计模式,在看框架源码的时候会更好的理解框架中的一些功能设计 为你的职场发展做铺垫,提升自己 code review 能力,把控团队代码质量 设计模式设计原则 设计原则是指导我们代码设计的一些经验总结,对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。只有这样,我们才能在项目中灵活恰当地应用这些原则。 单一职责原则 对于一个类而言,应该仅有一个引起它变化的原因 如果一个类承担的职责过多,就等于把这些职责耦合再一起,一个职责的变化可能会削弱或者抑制这个类完全其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 开放-封闭原则 开放-封闭原则是说软件实体(类、模块、函数等等

跟我一起学习设计模式(一)总览

南楼画角 提交于 2020-08-10 01:44:59
Dessign Pattern Overview 目录 Dessign Pattern Overview Overview Core Concepts Design Principle Refactoring to Patterns GOF-23 Encapsulate Change Overview 在 软件工程 中, 设计模式 (design pattern)是对 软件设计 中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希·伽玛 (Erich Gamma)等人在1990年代从 建筑设计 领域引入到 计算机科学 的。 设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类别 或 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 引用自维基百科 Core Concepts 变化是复用的天敌,本质是找到变化,封装变化,提高可复用性 如果一个系统所有点都在变化或者一直不变,是不能用设计模式来解决的 Design Principle 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应当依赖于抽象(稳定) 抽象(稳定