
设计模式
青云ing
这个作者很懒,什么都没留下…
展开
-
[学习笔记]设计模式-访问者模式
模式定义 访问者模式(Vistor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。模式结构图示例代码 class Program { static void Main(string[] args) { ObjectStructure o = new ObjectStructure(); o.Attach(new Co...原创 2021-11-25 11:09:13 · 97 阅读 · 0 评论 -
[学习笔记]设计模式-解释器模式
模式定义解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解原创 2021-11-24 16:01:25 · 111 阅读 · 0 评论 -
[学习笔记]设计模式-享元模式
模式定义享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。模式结构图示例代码 class Program { static void Main(string[] args) { .原创 2021-11-24 15:02:10 · 334 阅读 · 0 评论 -
[学习笔记]设计模式-中介者模式
模式定义 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式是一种对象行为型模式,其主要优点如下。类之间各司其职,符合迪米特法则。 降低了对象之间的耦合性,使得对象易于独立地被复用。 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。其主要缺点是:中介者模式将原本多个对象直接的相互依赖变成了中介者和...原创 2021-11-24 13:45:27 · 151 阅读 · 0 评论 -
[学习笔记]设计模式-职责链模式
模式定义职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链模式结构图示例代码原创 2021-11-24 10:54:20 · 82 阅读 · 0 评论 -
[学习笔记]设计模式-命令模式
模式定义 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。模式结构Command: 定义命令的接口,声明执行的方法。ConcreteCommand: 命令接口实现对象,是“虚”的实现;通常会...原创 2021-11-18 18:05:49 · 87 阅读 · 0 评论 -
[学习笔记]设计模式-桥接模式
模式场景在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。模式定义桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。抽象化存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些原创 2021-11-18 17:27:55 · 100 阅读 · 0 评论 -
[学习笔记]设计模式-合成复用原则
合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。合成复用原则的重要性 通常类的复用分为继承...原创 2021-11-18 16:01:27 · 114 阅读 · 0 评论 -
[学习笔记]设计模式-单例模式
模式定义单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。模式UML示例代码 public sealed class Singleton { private static readonly Singleton inst.原创 2021-11-18 15:48:14 · 95 阅读 · 0 评论 -
[学习笔记]设计模式-迭代器模式
模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。模式结构图示例代码 class Program { static void Main(string[] args) { ConcreteAggregate a = new ConcreteAggregate(); a[0] = "张三"; ...原创 2021-11-16 15:13:35 · 112 阅读 · 0 评论 -
[学习笔记]设计模式-组合模式
模式定义组合模式(Composite),将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式结构图示例代码 class Program { static void Main(string[] args) { Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root..原创 2021-11-16 13:27:42 · 97 阅读 · 0 评论 -
[学习笔记]设计模式-备忘录模式
模式定义 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。模式结构图示例代码 class Program { static void Main(string[] args) { Originator o = new Originator(); o.State = "On"; ...原创 2021-11-15 16:59:04 · 140 阅读 · 0 评论 -
[学习笔记]设计模式-适配器模式
模式定义适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。模式结构图示例代码 class Program { static void Main(string[] args) { Target target = new Adapter(); target.Request(); .原创 2021-11-15 16:14:39 · 92 阅读 · 0 评论 -
[学习笔记]设计模式-状态模式
模式定义 状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那就没有必要用“状态模式”了。模式结构图代码示例 class Program { static void Main(string[] ...原创 2021-11-15 15:45:39 · 84 阅读 · 0 评论 -
[学习笔记]设计模式-抽象工厂模式
模式定义 抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。 工厂模式中的每一个形态都是针对一定问题的解决方案,工厂方法针对的是多个产品系列结构;而抽象工厂模式针对的是多个产品族结构,一个产品族内有多个产...原创 2021-11-10 15:55:07 · 170 阅读 · 0 评论 -
[学习笔记]设计模式-观察者模式
模式定义 观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。基本介绍 观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式...原创 2021-11-10 11:34:50 · 112 阅读 · 0 评论 -
[学习笔记]设计模式-建造者模式
模式定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。角色在这样的设计模式中,有以下几个角色:builder:为创建一个产品对象的各个部件指定抽象接口。 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。 Director:构造一个使用Builder接口的对象。 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过...原创 2021-11-10 10:13:30 · 65 阅读 · 0 评论 -
[学习笔记]设计模式-外观模式
外观模式(Facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式结构图示例代码原创 2021-11-10 09:10:04 · 83 阅读 · 0 评论 -
[学习笔记]设计模式-迪米特法则
狭义的迪米特法则 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。狭义的迪米特法则的缺点: 在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的业务逻辑无关。遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。 门面...原创 2021-11-08 18:10:46 · 196 阅读 · 0 评论 -
[学习笔记]设计模式-模版方法模式
模板方法模式定义模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式结构图代码示例 class Program { static void Main(string[] args) { AbstractClass c; c = new ConcreteClassA(); .原创 2021-11-08 17:12:27 · 83 阅读 · 0 评论 -
[学习笔记]设计模式-原型模式
原型模式定义原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节原型模式UML图原型模式代码 class Program { static void Main(string[] args) { ConcretePrototypel p1 = new ConcretePrototype.原创 2021-11-08 11:02:07 · 105 阅读 · 0 评论 -
[学习笔记]设计模式-工厂方法模式
模式简介 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。...原创 2021-11-08 10:13:31 · 116 阅读 · 0 评论 -
[学习笔记]设计模式-代理模式
所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。代理模式UML图代码示例 class Program { static void Main(string[...原创 2021-11-02 19:42:57 · 111 阅读 · 0 评论 -
[学习笔记]设计模式-装饰模式
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。定义 23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。特点 (1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。 ...原创 2021-11-01 17:16:12 · 101 阅读 · 0 评论 -
[学习笔记]设计模式-里氏替换原则
里氏替换原则的定义 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出:继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure that any property proved abou...原创 2021-11-01 10:34:43 · 133 阅读 · 0 评论 -
[学习笔记]设计模式-依赖倒转原则
1、高层模块不应该依赖底层模块,它们都应该依赖于抽象。2、抽象不应该依赖于细节,细节应该依赖于抽象。High level modules should not depend upon low level modules. Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions...原创 2021-10-29 15:17:37 · 149 阅读 · 0 评论 -
[学习笔记]设计模式-开放封闭原则
开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。核心思想 关于开放封闭原则,其核心的思想是: 软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。因此,开放封闭原...原创 2021-10-29 11:20:35 · 139 阅读 · 0 评论 -
[学习笔记]设计模式-单一职责
就一个类而言,应该仅有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。...原创 2021-10-29 10:56:47 · 74 阅读 · 0 评论 -
[学习笔记]设计模式-策略模式
目录定义简介组成策略模式UML图应用场景优缺点代码示例定义 策略模式是指有一定行动内容的相对稳定的策略名称。策略模式在古代中又称“计策”,简称“计”,如《汉书·高帝纪上》:“汉王从其计”。这里的“计”指的就是计谋、策略。策略模式具有相对稳定的形式,如“避实就虚”、“出奇制胜”等。一定的策略模式,既可应用于战略决策,也可应用于战术决策;既可实施于大系统的全局性行动,也可实施于大系统的局部性行动。简介 策略模式作为一种软件设计模式,指对象有某个...原创 2021-10-28 16:56:28 · 131 阅读 · 0 评论 -
[学习笔记]设计模式-简单工厂模式
简单工厂模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。基本简介实现方式 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。该模式中包含的角色及其职责工厂(C...原创 2021-10-28 10:35:05 · 123 阅读 · 0 评论