标签:#软件设计模式

共 63 篇文章

依赖反转原则

在面向对象编程领域中,依赖反转原则(Dependency inversion principle, DIP)是指一种特定的解耦(传统的依赖关系建立在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。 该原则规定: 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。 抽象接口不应该依赖于具体实现。而具体…

控制反转

控制反转(,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。 起源 早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了,因为大多数应用程序都是由两个或是更多的类通过彼此的合作来实现业务…

发布/订阅

在软件架构中,发布/订阅(Publish–subscribe pattern)是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。 发布/订阅是消息队列范式的兄弟,通常是更大的面向消息中间件系统的一部分。大多数消息系统在AP…

存储传递风格

存储传递风格是一种技术,用来建模可变而不用使用全局变量。它通常出现在将指令式程序转换成纯函数式程序的场合。 实例 考虑如下这个用“非存储传递风格”书写的JavaScript程序: var lastWasA = false // treebin表示字符串的二叉树。 // treebin要么是一个字符串, // 要么是{l : , r: }。 // 对这个树的叶子的中序遍历含有'a'跟随着'b'吗? function aThenB(tree…

单例模式

在面向对象编程中,单例模式(),是一种常用的创建型软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 实现 实现单例模式的思路是:一个类能返回对象一个…

中介者模式

在软件工程领域,中介者模式(),定义了一个中介者对象,该对象封装了系统中对象间的交互方式。 由于它可以在运行时改变程序的行为,这种模式是一种行为型模式 。 概述 中介者模式是23个周知模式( 即GoF《设计模式》)中的一个,GoF设计模式旨在提供重复出现的设计问题的解决方案,以编写灵活和可复用的面向对象软件。也就是说,使对象更加易于实现、修改、测试和复用。 通常程序由大量的类组成,这些类中包含程序的逻辑和运算。 然而,当开发者将更多的类…

异步方法调用

异步方法调用或异步方法模式是(多线程)面向对象程序设计中用于异步调用对象的潜在的长期运行方法的一种设计模式。它等价于提出的模式。 基于事件的异步模式是异步方法调用的一个变种,开销更大但能更好的表现软件组件对象。.NET框架和中的java.util.concurrent.FutureTask类中使用的基于事件的异步模式使用事件来解决同样的问题。 大部分编程语言中对方法的调用是同步执行的。例如在线程执行体内,即线程的调用函数中,方法的调用就…

呈现与内容分离

呈现与内容分离(或“样式与内容分离”,原则的特例)是一句常见的熟语、一种设计哲学,同时也是在多种出版技术中应用的一种方法学,涉及到信息检索、樣板處理器、网页设计、網頁程式設計、文字处理、桌面出版、模型驱动开发等领域。其为关注点分离这个更加宽泛的哲学的特例。 本意 这句话作为熟语的本意是:一篇文档的实际内容和意义,与这篇文档呈现给读者的方式,是相互独立的。 一个很常见的例子就是HTML里面表示强调的 短语元素。强调属于文档内容的一部分,而…

Model-view-presenter

Model-view-presenter,簡稱MVP,是電腦軟體設計工程中一種對針對MVC模式,再審議後所延伸提出的一種軟體設計模式。 模式描述 Model-View-Presenter (MVP) 是使用者介面設計模式的一種,被廣泛用於便捷自動化單元測試和在呈現邏輯中改良分離關注點(separation of concerns)。 Model 定義使用者介面所需要被顯示的資料模型,一個模型包含著相關的業務邏輯。 View 視圖為呈現使…

MVVM

MVVM()是一种软件架构模式。 MVVM有助于将图形用户界面的开发与业务逻辑或后端逻辑(数据模型)的开发分离开来,这是通过置标语言或GUI代码实现的。MVVM的视图模型是一个值转换器, 这意味着视图模型负责从模型中暴露(转换)数据对象,以便轻松管理和呈现对象。在这方面,视图模型比视图做得更多,并且处理大部分视图的显示逻辑。 MVVM以相同的方式抽象出视图的状态和行为, MVVM模式的组成部分 ; 模型 : 模型是指代表真实状态内容的领…

沃德·坎宁安

沃德·坎宁安(;),是美國计算机程序员,也是Wiki概念的发明者。他也是设计模式和敏捷软件方法的先驱之一。 他从普渡大学获得电子工程和计算机科学的交叉学科工学学士学位,以及计算机科学的硕士学位。 1995年在波特兰模式知识库创建了第一个Wiki站点。这个站点现在还在运作,致力于“人、项目和模式”,并且是一个“程序设计语言思想的非正式历史”。例如,这个站点被用来为有用的软件开放的模式语言以及极限编程的软件方法的发展进行分类。坎宁安提到Wi…

访问者模式

(UML)来表示。]] 访问者模式(),是一种将算法与对象结构分离的软件设计模式。在传统的单分派语言比如Smalltalk、Java和C++之中,访问者模式被用来模拟。在支持多分派的语言如CLOS之中,访问者模式就不再需要了。 概述 访问者模式是一个由许多对象构成的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象;访问者是一个接口,它有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出相應的動作;在对象…

監視器 (程序同步化)

監視器 (,也称为-{zh-cn:监视器; zh-tw:管程;}-) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享資源。這些共享資源一般是硬件或一群變數。管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。与那些通过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计。 管程提供了一种机制,线程可以临时放弃互斥访问,等待某些条件得到满足后,重新获得执行权恢复它的互斥访…

反面模式

在软件工程中,反面模式(anti-pattern或antipattern)指的是在实践中經常出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。 安德魯·克尼格在1995年造了anti-pattern这个词,灵感来自于GoF的《设计模式》一书中所引入的“设计模式”(design pattern)的概念。三年后antipattern因《A…

设计模式 (计算机)

在軟體工程中,設計模式()是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代從建筑设计領域引入到計算機科學的。 設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。面向对象設計模式通常以類別或物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象,…

锁 (计算机科学)

在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。 一般的鎖是建議鎖(advisory lock),每個線程在訪問對應資源前都需取得鎖的資訊,再根據資訊決定是否可以存取。若存取對應資訊,鎖的狀態會改變為鎖定,因此其他線程此時不會訪問該資源,當資源結束後,會恢復鎖的狀態,允許其他線程的訪問。我们日常使用的基本都是建议锁,它并不强制生效。这里的不强制生效的意思是,如果某一个进程对一个文…

解释器模式

类图]] 在计算机编程中,解释器模式(),是一种设计模式,它规定了如何求值一个语言中的句子。基本想法是使专门计算机语言的每个符号(终结符与非终结符)都有一个类。这个语言中句子的语法树是合成模式的一个实例,它被用来为客户求值(解释)这个句子。 结构 在上面的UML类图中: 客户Client类提及公共的AbstractExpression接口来解释一个表达式interpret(context)。 终结表达式TerminalExpressio…

数据访问对象

在计算机软件中,数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象介面的对象。通过映射应用程序对持久层的调用,DAO提供一些特定的数据操作,而无需暴露数据库细节。这种隔离支持单一功能原则。它分离了应用程序需要访问哪些数据,就域特定对象和数据类型(DAO的公共接口),而言,这些需求可以用数据库管理系统(DBMS)、数据库模式等满足(DAO的实现)。 尽管这种设计模式同样适用于以下内…

工厂方法模式

描述的工厂方法模式]] 工厂方法模式(),是一种实现了工厂概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。 概述 对象创建中的有些过程包括决定创建哪个对象、管理对象的生命周期,以及管理特定对象的建立和销毁的概念。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。” 创建一个对象常常需要复杂的过程,所以不适合包含…

MVC

MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并…