![](https://img-blog.csdnimg.cn/20210725102424476.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Architecture & Design
文章平均质量分 93
软件架构与设计相关
alwaysrun
当你站在山顶的时候,你的头上还有星空。
展开
-
[Design]-API设计指南
文章目录面向资源设计REST API设计流程资源方法资源命名资源ID标准方法List自定义标准字段错误错误消息HTTP映射状态码命名约定服务名称包名称方法名称本篇摘选自《Google API Design Guide》。面向资源设计API设计要遵循简单、一致、易用的原则。在REST架构中资源与方法可视为API的动词与名词;在HTTP REST API中,资源名称对应于URL,而方法对应于HTTP中的GET/POST/PUT/PATCH/DELETE。REST API一组REST API被建模为一原创 2021-07-25 21:07:50 · 308 阅读 · 0 评论 -
面向对象(Object-Oriented)的基础
对象:是一个自包含的实体,用一组可识别的特性和行为来标识。类:具有相同的属性和功能的对象的抽象集合。实例:就是一个真实的对象。而实例化就是创建对象的过程。属性:是一个方法或一对方法,但在调用他的代码看来,他是一个字段,即属性适合于以字段的方式使用方法调用的场合。(字段是存储类要满足其设计所需要的数据,字段是与类相关的变量)。原创 2009-04-02 14:01:00 · 485 阅读 · 0 评论 -
命令模式(Command)
命令模式(Command):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 优点:第一,能较容易地设计一个命令队列;第二,在需要的情况下,可以较容易地将命令记入日志;第三,允许接收请求的以防决定是否要否决请求;第四,可以容易地实现对请求的撤销和重做;第五,由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很原创 2009-04-01 15:55:00 · 512 阅读 · 0 评论 -
职责链模式(Chain of Responsibility)
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并并沿着这条链传递请求,直到有一个对象处理他为止。 接受者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可以简化对象的互相连接,他们仅需保持一个指向其后续者的引用,而不需要保持他所有的候选接受者的引用原创 2009-04-01 16:10:00 · 381 阅读 · 0 评论 -
中介者模式(Mediator)
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通讯的场合;以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。 中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互原创 2009-04-01 16:24:00 · 402 阅读 · 0 评论 -
桥接模式(Bridge)
桥接模式(Bridge):将抽象部分与他的实现部分分离,使他们都可以独立地变化。 合成/聚合复用原则(CARP):尽量使用合成/聚合,尽量不要使用类继承。 聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一宗强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的声明周期一样。 优先使用对象的合成/聚合将有助于你保持每个类被封原创 2009-04-01 14:55:00 · 411 阅读 · 0 评论 -
享元模式(Flyweight)
享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都相同,如果能把这些参数转移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度地减少单个实例的数目。原创 2009-04-01 16:42:00 · 421 阅读 · 0 评论 -
适配器模式(Adapter)
适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 两个类所做的事情相同或相似,但是具有原创 2009-04-01 13:09:00 · 419 阅读 · 0 评论 -
组合模式(Composite)
组合模式(Composite):将对象组合成属性结构以标识“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 当发现需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。 组合模式让用户可以一致地使用组合结构和单个对象。原创 2009-04-01 13:48:00 · 349 阅读 · 0 评论 -
解释器模式(Interpreter)
解释器模式(Interpreter):给定一个语言,定义他的文法的一宗表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。 当一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可以使用原创 2009-04-01 16:56:00 · 490 阅读 · 0 评论 -
访问者模式(Visitor)
访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。他使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统。他把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。 访问者模式的目的是要把处理从数据结构分离出来。如果有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式比较合适。原创 2009-04-01 17:47:00 · 585 阅读 · 0 评论 -
设计模式大比拼(总结)
内聚与耦合:内聚性描述的是一个例程内部组成部分直接相互联系的紧密程度;而耦合描述的是一个例程与其他例程之间联系的紧密程度。软件开发目标:内部完整,即高内聚;与其他例程之间的联系则是小巧、直接、可见、灵活的,即松耦合。 创建型模式:抽象了实例化的过程。他们帮助一个系统独立于如何创建、组合和标识他的那些对象。创建型模式都会将关于该系统使用哪些具体的类的信息封装起来。允许客户用结原创 2009-04-02 16:47:00 · 718 阅读 · 0 评论 -
[设计模式]单例模式-C#实现
单例模式简介同步锁方式静态变量方式单例模式简介单例模式是一种常见的设计模式,它的核心结构为一个特殊的单例类。通过单例模式可以保证系统中一个类只有一个实例。常见的实现方式有:懒汉模式:不到万不得已是不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化。 饿汉模式:在单例类定义的时候就进行实例化;无论是否用到,先实例化再说。一般情况下,单例模式都需要考虑线程安全,...原创 2019-07-28 21:35:54 · 139 阅读 · 0 评论 -
单例模式(Singleton)
单例模式(Singleton):保证一个类仅有一个示例,并提供一个访问他的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但他不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存他的唯一实例。这个刘可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。class CSingleton{public: ~CSingleto原创 2009-04-01 14:12:00 · 474 阅读 · 0 评论 -
迭代器模式(Iterator)
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 当需要访问一个聚集对象,而不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一个项等统一接口。 迭代器模式就是分离了集合对象的遍历行为,抽象一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码原创 2009-04-01 13:57:00 · 413 阅读 · 0 评论 -
工厂方法模式(Factory Method)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key原创 2009-03-24 17:33:00 · 410 阅读 · 0 评论 -
原型模式(Prototype)
原型模式(Prototype):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型就是从一个对象再创建另外一个可定制的对象,而不需要知道任何创建的细节。 一般在初始化的信息不发生变化的情况下,克隆是最好的方法。这既隐藏了细节,又大大提高了性能。原创 2009-03-24 17:39:00 · 399 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体系他的优势。原创 2009-03-25 10:44:00 · 331 阅读 · 0 评论 -
单一职责原则(SRP)
单一职责原则(SRP):就一个类而言,应该仅有一个引起他变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把这些职责互相分离。如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责原创 2009-03-24 13:39:00 · 430 阅读 · 0 评论 -
开放-封闭原则
开放-封闭原则:软件实体(类、模板、函数等)应该可以扩展,但不可以修改。即,对于扩展是开放的(Open for extension);对于更改是封闭的(Closed for modification)。 无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对于那种变化封闭做出选择。 开放-封闭原则是面向对象设计的核心原创 2009-03-24 13:56:00 · 566 阅读 · 0 评论 -
装饰模式(Decorator)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key原创 2009-03-24 16:52:00 · 458 阅读 · 0 评论 -
代理模式(Proxy)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。 虚拟代理:根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象。 安全代理:用来控制真实对象访问时的权限。 智能代理:当调用真实的对象时,代理处理另外一些事。原创 2009-03-24 17:18:00 · 334 阅读 · 0 评论 -
迪米特法则(LoD)-最少知识原则
迪米特法则(LoD)-最少知识原则:如果两个类不必彼此直接通信吗,那么这两个类就不应当发生直接的互相作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三个转发这个调用。 在结构设计上,每一个类都应当尽量降低成员的访问权限。其基本思想,是强度了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。原创 2009-03-26 09:40:00 · 1065 阅读 · 0 评论 -
外观模式(Facade)
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式使用:首先,在设计初期阶段,应该要有意识的将不同的两个层分离;其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观模式可以提供一个简单的接口,减少他们之间的依赖;第三,在维护遗留大系统时,可以增加一个Facade类。原创 2009-03-26 10:04:00 · 421 阅读 · 0 评论 -
建造者模式(Builder)
建造者模式(Builder):将一个复杂对象的构建与他的表示分离,使得同样的构造过程可以创建不同的表示。 建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品如何组装的,所以若需要改变一个产品的内部表示,只需要定义一个具体的建造者即可。 建造者模式适用于:当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式原创 2009-03-26 15:03:00 · 384 阅读 · 0 评论 -
状态模式(State)
状态模式(State):当一个对象的内在状态改变时,允许改变其行为,这个对象看起来是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断路径转义到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。 当一个对象的行为取决于他的状态,并且他必须在运行时刻根据状态改变他的行为时,原创 2009-04-01 11:51:00 · 378 阅读 · 0 评论 -
备忘录(Memento)模式
备忘录(Memento)模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 Memento模式比较适用于功能比较复杂的,但是需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时。使用备忘录模式可以把复杂的对象内部信息对其他的对象屏蔽起来。原创 2009-04-01 13:34:00 · 407 阅读 · 0 评论 -
依赖倒转原则(针对接口编程,而非实现编程)
<!-- document.domain="qq.com"; //parent.qZEditor.callback(); function init(){ var key = location.hash.substr(1); document.editorID = key; parent.editorHash[key原创 2009-03-24 14:18:00 · 788 阅读 · 0 评论