
设计模式
设计模式课堂笔记。
爱吃老谈酸菜的DV
选择适合自己的。
展开
-
【设计模式】访问者模式(Visitor)
访问者模式访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是同类对象的聚集。如果需要针对一个包含不同类型元素的聚集采取某种操作,而操作的细节根据元素的类型不同而有所不同时,就会出现必须对元素类型做类型判断的条件转移语句。问题提出在面向对象系统的开发和设计过程,经常会遇到一种情况就是需求变更。Visitor模式则提供了一种解决方原创 2020-06-15 01:30:03 · 474 阅读 · 0 评论 -
【设计模式】享元模式(Flyweight)
概述享元模式是以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内部状态和外部状态。内部状态是存储在享元对象内部并且不会随环境改变而改变。因此内部状态可以共享。享元模式结构图示意性代码namespace 享元模式{ abstract class Flyweight { public abstract void Operation(int extrinsicstate); } class ConcreteFlyweight原创 2020-06-14 23:38:20 · 400 阅读 · 0 评论 -
【设计模式】中介者模式(Mediator)
引入在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信。在系统比较小的时候,可能对象间的通信不是很多、对象也比较少之我们可以直接硬编码到各个对象的方法中。当系统规模变大,对象的量变引起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门处理对象间交互和通信的类,这个中介者就是Mediator模式。Mediator模式将对象间的交互和通信封装在一个类中,各个对象间的通信不必显式去声明和引用,大大降低了系统的复杂性能(了解原创 2020-06-09 22:39:08 · 358 阅读 · 1 评论 -
【设计模式】职责链模式(Chain of Responsibility)
问题抽象客户端发出一个请求,会有很多对象都可以来处理这个请求,而且不同对象的处理逻辑是不一样的。对于客户端而言,无所谓谁来处理,反正有对象处理就可以了。而且在上述处理中,还希望处理流程是可以灵活变动的,而处理请求的对象需要能方便地修改或者是被替换掉,以适应新的业务功能的需要。职责链模式十多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连城一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。模式结构抽象处理者(Handler)角色定义出一个处理请求的原创 2020-06-09 20:59:30 · 345 阅读 · 0 评论 -
【设计模式】命令模式(Command)
概述命令模式又称为行动(Action) 模式或交易(Transaction) 模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化;对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装。命令模式把命令的责任和执行命令的责任分割开,委派给不同的对象。模式结构示意性代码namespace 命令模式{ class Receiver { public void Action()原创 2020-06-09 20:13:18 · 421 阅读 · 0 评论 -
【设计模式】桥接模式(Bridge)
面向对象:松耦合高内聚面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling) 。然而这也是面向对象设计过程中最难把握的部分。GOF在提出Bridge模式的时候指出:Bridge模式的用意是“将 抽象化(Abstraction) 与 实现化(Implementation) 脱耦,使得二者可以独立地变化”。耦合和脱耦耦合就是两个实体的行为的某种强关联。将它们的强关联去掉,就是耦合的解脱,或称脱耦。脱耦是指将抽象化和实现化之原创 2020-05-31 19:47:31 · 433 阅读 · 0 评论 -
【设计模式】单例模式(Singleton)
Singleton模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是Singleton模式。原创 2020-05-31 19:04:38 · 341 阅读 · 0 评论 -
【设计模式】组合模式(Composite)
引入商品类别树的节点被分成两种,一种是容器节点,另一种是叶子节点。容器节点可以包含其他容器节点或者叶子节点组合模式组合模式有时又叫做部分——整体模式(Part-Whole)。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。一个树结构由两种节点组成:树枝节点和树叶节点。树枝节点可以有子节点,而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。模式结构抽象构件(Component)角色这是一个抽象角色原创 2020-05-24 23:58:19 · 387 阅读 · 0 评论 -
【设计模式】备忘录模式(memento)
Memento模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态并在该对象之外保存这个状态。这样以后就可以利用该保存的状态实施恢复操作。模式结构Originator(原发器)创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来回复其内部状态。Memento(备忘录)储存原发器的内部状态,备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。Caretaker(负责人)负责人又称为管理者,在负责人类中可以储存一个或多个备忘录对象,他只负责存储对象而不能修改原创 2020-05-24 23:16:11 · 371 阅读 · 1 评论 -
【设计模式】适配器模式(Adapter)
适配器模式(Adapter)适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。软件系统设计和开发的问题在软件系统设计和开发中,这种问题也会经常遇到:有时为了完成某项工作购买了一个第三方的库来加快开发。这就带来了一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类(不能在-起工作)可以在一起工作,Adapter模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望接口的方法。原创 2020-05-10 21:21:26 · 374 阅读 · 0 评论 -
【设计模式】状态(State)模式
状态模式主要解决的是当控制一个对象状态转换的条侏表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的系列类当中,可以把复杂的逻辑简化。状态模式允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表系不同状态的一系列类当中,可以把复杂的逻辑简化。每个人、事务在不同的状态下会有不同表现动作,而一个状态又会在不同的表现下转移到写一个不同的状态。在State模式中我们将状态逻辑和原创 2020-05-10 18:46:33 · 360 阅读 · 0 评论 -
【设计模式】抽象工厂(Abstract Factory)模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。为了方便引进抽象工厂模式引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。图中一共有四个产品族,分布于三个不同的等级结构中。只要指明一个产品所处的产品族一集它所属的等级结构中就可以为以确定这个产品。引进抽象工厂格式所谓的抽象工厂是指一个工厂等级结构可以常见出分属于不同产品等级结构的一.原创 2020-05-10 16:50:47 · 403 阅读 · 0 评论 -
【设计模式】观察者(Observer)模式
观察者模式又名发布-订阅(Publish/Subscribe)模式模型-视图(Model/View)模式源-监听器(Source/Listener)模式从属者(Depenfents)模式观察者模式定义了一种一对多的依赖关系,让多个观察和对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。...原创 2020-04-25 21:14:46 · 394 阅读 · 0 评论 -
【设计模式】建造者(生成器Builder)模式
将一个复杂对象的构件与它的表示分离,是的同样的构建可以创建不同的表示。对象性质的建造有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。有些情况下,一个对象的一些性质必须按照某个顺序复制才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况是的性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质...原创 2020-04-18 22:24:36 · 423 阅读 · 0 评论 -
【设计模式】外观(门面)模式
Facade Pattern外部与一个子系统的通信必须通过一个统一的外观(Facade)对象进行,这就是外观模式。外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观(Facade)对象进行。外观模式提供一个高层次的接口,是的子系统更易于使用。外观模式的外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。外观模式...原创 2020-04-18 21:25:25 · 347 阅读 · 0 评论 -
【设计模式】模板方法
AbstractClass准备一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来迫使予类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。模板方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模板方法模式而没有意识到自己已经使用了这个模式。模板方法模式是基于继承的代码复用的基本技...原创 2020-04-18 20:27:02 · 302 阅读 · 0 评论 -
【设计模式】原型模式(Prototype)
原型(Prototype)模式的用意是:通过给出一个原型对象来指明索要创建的对象类型,然后用复制这个原型对象的方法创建出更多的同类型对象。不同语言对原型模式的支持一、JavaJava语言中已经提供了clone方法,定义在Object类中,需要实现克隆功能的类,只需要实现java.lang.Cloneable接口即可。二、C#在C#里面,我们可以很容易的通过Clone()方法实现原型模式...原创 2020-04-18 18:52:36 · 469 阅读 · 0 评论 -
【设计模式】工厂方法模式
回顾简单工厂模式Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。工厂类角色Creator工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品角色Product定义简单工厂创建的对象的父类或他们共同拥有的接口。可以使一个类、抽象类或接口。具体产品角色ConcreteProduct定义工厂...原创 2020-04-05 23:50:51 · 435 阅读 · 0 评论 -
【设计模式】代理模式
代理模式结构抽象主题(Subject)角色 声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。代理主题(Proxy)角色 代理主题角色内部含有对真实主题的引用,从而可以再任何时候操作真实主题对象;==代理主题角色提供一个与真实主题角色相同的接口,以便可以再任何时候都可以替代真实主题;==控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除主题对象...原创 2020-04-05 21:47:48 · 272 阅读 · 0 评论 -
【设计模式】装饰模式
装饰模式(Decorator):又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式常常被称为包裹模式,就是因为每一个具体装饰类都将下一个具体装饰类或者具体构成类包裹起来。包含角色抽象构成(Component)角色给出一个抽象接口,以规范准备接收附加责任的对象。具体构成(Concrete Component)角色实现组件对象接口,通常就是被装饰...原创 2020-04-05 14:22:35 · 303 阅读 · 0 评论 -
【设计模式】常见面向对象设计原则
设计原则是思想上的指导设计模式是实现上的手段设计模式是设计原则的具体体现在实际开发中,很少做到完全遵守,总是在有意无意的违反一些或者部分原则设计是一种危险的平衡艺术A单一职责原则(SRP)Single Responsibility Principle就一个类而言,应该仅有一个引起它变化的原因(职责)。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削...原创 2020-04-05 12:20:50 · 266 阅读 · 0 评论 -
【设计模式】策略模式
类的划分原则面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。策略模式一、定义策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类(...原创 2020-03-27 12:45:24 · 375 阅读 · 0 评论 -
【设计模式】简单工厂模式
面向对象程序设计的优点和思想:可维护可扩展可复用灵活性好面向对象程序设计的原则:通过封装、继承和多态把程序的耦合度降低。类内耦合过紧不利于维护。使用设计模式是的程序更加灵活,容易修改,且易于复用。用尽可能的方法去避免重复工厂模式一、含义特点工厂模式专门负责将大量有共同接口的类实例化。工厂可以动态的决定将哪一个类实例化,不必事先知道每次要被实例化哪个类。工厂模式的形态:...原创 2020-03-27 11:42:40 · 376 阅读 · 0 评论 -
【设计模式】面向对象基础---温故知新
什么是设计模式?设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式的分类有哪些?创建型模式:抽象了对象实例化的过程,用来帮助创建对象的实例。Abstract Factory(工厂模式),Builder(构建者模式又叫生成器模式),Factory Metho...原创 2020-02-29 18:08:55 · 369 阅读 · 0 评论