![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面向对象开发学习
王大全
哥哼调。
展开
-
三、经典模式(23) 访问者模式
访问者模式访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式可以使得用户在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。访问者模式:表示一个作用于某对象结构中的各个元素的操作。访问者模式让你可以在不改变各元素的类的前提下定义作用于这些元素的新操作访问者模式有5种角色:1.Visitor(抽象访问者):为对象结构中的每一个具体元素类声明一个访问操作,原创 2021-06-21 15:55:09 · 59 阅读 · 0 评论 -
三、经典模式(22) 模板方法模式
模板方法模式(Template Method Pattern)一种类行为模式,该结构中只存在父类与子类之间的继承关系。模板方法提供了具体的模板方法来定义算法结构,而具体步骤的实现可以在其子类中完成。模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的某些特定的步骤。模板方法模式有2种角色:1.AbstractClass(抽象类):定义了一系列基本操作(具体的或抽象的),每一个基本操作对应算法的一个步骤,在其子类可以重定义或实现原创 2021-06-21 15:10:41 · 53 阅读 · 0 评论 -
三、经典模式(21) 策略模式
策略模式(Strategy Pattern)策略模式用于算法的自由切换和扩展,对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便更换算法或增加新的算法。策略模式:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法可以独立于使用它的客户变化。策略模式有3种角色:1.Context(环境类):环境类是使用算法的类,它在解决某个问题(即实现某个功能)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。2.原创 2021-06-21 14:48:32 · 96 阅读 · 0 评论 -
三、经典模式(20) 状态模式
状态模式状态模式用于解决系统中复杂对象的状态转移以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时,可以使用状态模式。可以使用if…else语句但是会比较复杂。特别是出现新的状态时,代码的扩展性很差。状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式有3种角色:1.Context(环境类):环境类又称上下文类,它时拥有多种状态的对象。其中维护一个抽象状态类的实例,这个实例定义当前的状态,在具原创 2021-06-21 14:16:07 · 88 阅读 · 0 评论 -
三、经典模式(19) 观察者模式
观察者模式(发布-订阅模式)观察者模式用于描述对象之间的依赖关系,为实现多个对象之间的联动提供了一种解决方案。观察者模式:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。观察目标:发生改变的对象。观察者:被通知的对象。用户可以根据需求增加或删除观察者。观察者模式有4种角色:1.Subject(目标):指被观察的对象,在目标中定义了一个观察者集合,一个观察目标可以被任意数量的观察者观察,提供了一系列方法来增加和删除观察者对象。2.Concr原创 2021-06-21 13:45:23 · 85 阅读 · 0 评论 -
三、经典模式(18)备忘录模式
备忘录模式(Memento Pattern)(标记Token模式)备忘录模式提供一种对象状态的撤销实现机制,当系统中某个对象需要恢复到某一历史状态可以使用备忘录模式。备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式有3种角色:1.Originator(原发器):原发器是一个普通类,通过创建一个备忘录来存储当前内部状态。一般将需要保存内部状态的类设计为原发器。2.Menento(备忘录):用于存储原发器的内原创 2021-06-17 10:49:11 · 71 阅读 · 0 评论 -
三、经典模式(17)中介者模式
中介者模式(调停者模式)对于对象之间存在复杂交互关系的系统,中介者模式提供了一种简化复杂交互的解决方案,将原本对象之间的两两交互转化为每个对象与中介者之间的交互。(比方:类似于QQ群作用,而不是一个一个发给用户),中介者模式将系统的网状结构变成以中介者为中心的星形结构。中介者模式:定义一个对象来封装一系列对象的交互,中介者模式使各对象之间不需要显式地相互引用,从而使其耦合松散,而且让你可以独立地改变它们之间的交互。中介者模式有4种角色:1.Mediator(抽象中介者):它定义一个接口,该接口用于原创 2021-06-17 10:22:55 · 88 阅读 · 0 评论 -
三、经典模式(16)迭代器模式
迭代器模式迭代器用于对一个聚合对象进行遍历,聚合对象只负责存储数据,而遍历数据由迭代器来完成,更符合单一职责原则的要求。存储多个成员对象(元素)被称为聚合类(Aggregate Classes),对应对象为聚合对象。迭代器模式:提供一种方法顺序访问同一个聚合对象中各个元素,且不用暴露该对象的内部表示。迭代器模式有4种角色:1.Iterator(r抽象迭代器):它定义了访问和遍历元素的接口吗,声明了用于遍历数据元素的方法。如:获取第一元素的First()方法,访问下一个元素的Next()方法,判断原创 2021-06-14 11:16:18 · 86 阅读 · 0 评论 -
三、经典模式(15)解释器模式
解释器模式解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。当需要开发一个新的语言时,开发人员可以使用解释器模式。实际中开发人员比较少用这个模式。解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中句子。解释器模式有4种角色:1.AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结表达式和非终结表达式的公共父类。2.TerminalExpression(终结原创 2021-06-14 10:44:26 · 56 阅读 · 0 评论 -
三、经典模式(14)命令模式
命令模式命名模式将请求发送者与请求接收者解耦,请求发送者通过命令对象来间接引用接收者,使得系统有更好的灵活性,可以在不修改现有的系统源代码的情况下让相同的发生者对应不同的接收者。相当与开关与电器的关系(空调、电风扇等等)命令模式:将一个请求封装为一个对象,从而让你可以用不同的额请求对客户端进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。代理模式有4种角色:1.Command(抽象命令类):抽象命令类一般是抽象类和接口,在其中声明了用于执行的Execute()等方法,通过这些可以调用请原创 2021-06-14 10:16:49 · 96 阅读 · 0 评论 -
三、经典模式(13)职责链模式
职责链模式职责链模式:避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。职责链可以是一条直线、一个环或者一个树形结构。代理模式有2种角色:1.Handler(抽象处理者):它定义了一个处理请求的接口,设计为抽象类,定义了抽象请求处理方法。抽象处理者类型的对象。2.ConcreteHandler(具体处理者):它抽象处理者的子类,可以处理用户的请求,在具体处理者类中实现抽象处理者定义的方法。在处原创 2021-06-14 09:49:22 · 52 阅读 · 0 评论 -
三、经典模式 行为型模式
行为型模式行为型模式(Behavioral Pattern)关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。行为型模式分为类行为型模式和对象行为型模式,其中类行为型模式使用继承关系在几个类之间分配行为,主要通过多态等方式来分配父类与子类的职责;对象行为型模式则使用对象的关联关系来分配行为模式名称定义职责链模式(Chain of Responsibility Pattern)避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请原创 2021-06-14 09:20:33 · 91 阅读 · 0 评论 -
三、经典模式(12)代理模式
代理模式(Proxy Pattern)当用户无法直接访问某个对象或某个对象存在困难时可以通过一个代理对象来间接访问,为保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据使用目的不同可以分为:保护代理(Protect Proxy)、远程代理(Remote Proxy)、虚拟代理(Virtual Proxy)、缓冲代理(Cache Proxy)等。代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。代理模式有3种角色:1.Subject(抽象主题角色)原创 2021-06-14 08:22:22 · 223 阅读 · 0 评论 -
三、经典模式(11)享元模式
享元模式(Flyweight Pattern)当系统中存在大量相同或者相似的对象时,可以考虑使用享元模式,它通过共享技术实现相同或相似的细粒度对象的复用,从而节约内存空间,提高系统性能。在享元模式提供一个享元池用于存储已经创建好的享元对象,并通过享元工厂类将享元对象提供给其他客户端使用。享元池:存储这些共享实例对象的地方避免了系统中出现相同或者相似的对象,同时又不影响客户端程序通过面向对象发方式对这些对象进行操作。享元模式:运用共享技术有效地支持大量细粒度对象的复用。享元对象能共享的关键是区分了原创 2021-06-13 11:53:13 · 53 阅读 · 0 评论 -
三、经典模式(10)外观模式
外观模式引入一个外观角色来简化客户端与子系统之间的交互,为复杂子系统调用提供一个统一的入口,使得子系统与客户端的耦合度降低,且客户端调用非常方便。外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。它负责和多个业务类交互,而客户端只需与该类交互。在外观模式,需要交互的业务类被称为子系统(Subsystem),客户端与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度。组合模式由2种角色:1.Facade(外观角色):在原创 2021-06-13 11:09:10 · 83 阅读 · 0 评论 -
三、经典模式(9)装饰模式
装饰模式装饰模式是一种用于替代继承的技术,通过无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。装饰模式:动态地给一个对象增加一些额外的职责。对新房进行装修并没有改变用于居住的本质,但可以让房子更漂亮,同样对已有的对象的功能进行扩展,以获得更加符合用户需求的对象,使得对象具有更加更强的功能。在不需要创建更多子类的情况下,在不改变一个对象本身功能的基础上给对象增加额外的新行为。组合模式由4种角色:1.原创 2021-06-13 10:47:07 · 58 阅读 · 0 评论 -
三、经典模式(8)组合模式
组合模式组合模式使用面向对象的方式来处理树形结构。组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待对象和组合对象。组合模式关注那些包含叶子构件和容器构件的结构以及它们的组织形式。树形结构随处可见,如操作系统中目录结构、应用软件的菜单结构和办公系统中的公司的组织结构。组合模式使得用户在使用时无须对容器对象和叶子对象区别开来。组合模式由3种角色:1.Component(抽象构件):可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在抽象构件中定义原创 2021-06-13 10:00:37 · 42 阅读 · 0 评论 -
三、经典模式(7)桥接模式
桥接模式如果系统种某个类存在两个独立变化的维度,通过桥接模式可以将这两个维度分离出来,使得两者可以独立扩展,桥接模式可以解决多层继承存在的问题。用抽象关联来取代传统的多层继承。将类之间的静态继承关系转换为动态的对象组合关系。是系统更灵活,更易于扩展。有效控制系统中类的个数。桥接模式:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。又称柄体模式(Handle and Body)和接口模式(Interface)桥接模式由4种角色:1.Abstraction(抽象类):它是用于定义抽象类的接口,通原创 2021-05-26 12:16:15 · 72 阅读 · 0 评论 -
三、经典模式(6)适配器模式
适配器模式结构型模式关注如何将现有类或对象组织在一起形成更加强大的结构,不同的结构型模式从不同的角度组合类或对象。适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。适配器模式包含以下3个角色:1.Target(目标抽象类):目标抽象类定义客户端所需的接口,可以是一个抽象类或接口,也可以是具体类。在C#中不支持多重继承,它只能是接口。2.Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。在类适配原创 2021-05-26 11:38:21 · 66 阅读 · 0 评论 -
三、经典模式(5)单例模式
单例模式单例模式:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例。1.单例类构造函数的可见性为private2.提供一个类型为自身的静态私有成员变量3.提供一个公有的静态工厂方法class Singleton{ private static Singleton instance = null; //静态私有成员变量 private Singleton() { } public static Singleton GetInstance() /原创 2021-05-26 09:59:54 · 70 阅读 · 0 评论 -
三、经典模式(4)原型模式
原型模式原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象原型模式可以提高相同类型对象的创建效率,简化创建过程。将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象复制自己来实现创建过程。需要注意的是,通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,不会相互影响。原型模式包含以下3个角色:1.Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类。可以是抽象类或者接口,甚至是具体实现类。原创 2021-05-23 11:19:22 · 55 阅读 · 0 评论 -
三、经典模式(3)建造者模式
建造者模式建造者模式属于创建型模式,将部件本身和它们的组装过程分开,用户只需要指定复杂对象的类型即可得到该对象,而无需知道其内部的具体构造细节。 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示建造者模式包含以下4个角色:1.Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,一般声明两个方法,BuildPart X()用于创建复杂对象的各个部件,GetResult()方法用于返回复杂对象,Builder既可以是抽象类也可以是接原创 2021-05-22 20:31:05 · 115 阅读 · 0 评论 -
三、经典模式(2)工厂模式
简单工厂模式(Simple Factory)创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无需关心对象的创建细节。 在简单工厂模式,只需记住一个简单的参数即可获得所需的对象实例简单工厂模式包含以下3个角色:1.Factory(工厂角色):负责实现创建所有产品实例的内部逻辑。2.Product(抽象产品角色):它是工厂类所创建所有对象的父类。3.ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标。抽象产品类:abstract class Product{原创 2021-05-20 18:53:27 · 200 阅读 · 0 评论 -
三、经典模式(1)介绍
每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。----Christopher Alexander良好的软件的基本特征是 高内聚、松耦合,使得它更易于维护、扩展和复用。在20世纪90年代,Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides四人出了本名为《设计模式:可复用面向对象软件设计基础》经典著作,称“GoF四人组”,其描述23种经典模式被称为“GoF设计模式”。设原创 2021-05-19 20:00:11 · 352 阅读 · 0 评论 -
二、面向对象开发
1.3 如何分解对象传统的方法从问题域中寻找名词,并创建对象来表示它…这样做结果更复杂,应该尝试将问题域分解为责任,然后定义必需的对象来实现这些责任,让它对自己的行为负责,“责任就是对象的意图”,按照“变化”进行领域分解和设计千万不要让一个类封装两个要变化的事物,除非这些变化明确地耦合在一起,如何发现变化发现变化,并且封装它。if/switch语句往往预示着变化。可以使用共性和可变性分析方法(CVA),其目的在于寻找变化,传统的方法是,继承创建基类,然后派生特化类按新的看法是将类按照相同的原创 2021-05-07 20:23:44 · 65 阅读 · 0 评论 -
一、面向对象开发
转变观念对象三个基本特征:封装 : 即内部的改动不会对外部产生影响继承 :通过派生来解决实现的重用问题多态 :无论何时创建了派生类对象,在使用基类对象的地方都可以使用此派生类对象。对象之间的关系又以下四种:聚合关系...原创 2021-05-07 19:40:57 · 283 阅读 · 0 评论