设计模式
文章平均质量分 70
江南梦才
这个作者很懒,什么都没留下…
展开
-
设计模式——15.Mediator中介者
用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互引用(编译时依赖→运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互。将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象互相关联"为"多个对象和一个中介者关联",简化了系统的维护抵御了可能的变化。随着控制逻辑的复杂化,Mediato俱体对象的实现可能相当复杂。这时候可以对Mediator对象进行分解处理。原创 2023-10-12 08:40:30 · 32 阅读 · 0 评论 -
设计模式——14.Adapter适配器
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。//目标接口(新接口)public://遗留接口(老接口)public://遗留类型//....//对象适配器(继承新接口+组合老接口)class Adapter: public ITarget{ //继承protected://组合public://现实中,新旧转换可能很复杂,这里只是伪码//类适配器。原创 2023-10-11 23:58:29 · 26 阅读 · 0 评论 -
设计模式——13.Proxy代理模式
为其他对象提供一种代理以**控制(隔离,使用接口)**对这个对象的访问。“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来许多问题,作为间接层的proxy对象便是解决这一问题的常用手段。具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如技术,有些可能对组件模块提供抽象代理层,在建构层次对对象做proxy。Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。原创 2023-10-11 23:57:28 · 26 阅读 · 0 评论 -
设计模式——12.Façade门面模式
为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade更多时候更是一种架构设计模式。Facade设计模式并非一个集装箱,可以任意地放进任何多个对象。原创 2023-10-11 23:56:11 · 25 阅读 · 0 评论 -
设计模式——11.Flyweight享元模式
运用共享技术有效地支持大量细粒度的对象。//实际实现中差别很大private:string key;else{//...面向对象很好地解决了抽象性的问题,但是作为—个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。Flyweight采用对象共享的做法来降低系统中对象的个数。原创 2023-10-11 23:53:50 · 22 阅读 · 0 评论 -
设计模式——10.Singleton单件模式
保证一个类仅有一个实例,并提供一个该实例的全局访问点。private:public://线程非安全版本//线程安全版本,但锁的代价过高Lock lock;//双检查锁,但由于内存读写reorder不安全Lock lock;//C++11版本之后的跨平台实现 (volatile)//获取内存fence//释放内存fencereturn tmp;Singleton模式中的实例构造器可以设置为protected以允许子类派生。原创 2023-10-11 23:52:25 · 24 阅读 · 0 评论 -
设计模式——09.Builder构建器
将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。public://House(){//C++不能直接在构造函数中使用虚函数。在这种情况下虚函数都是静态绑定(子类的构造函数,会先调用父类的构造函数,子类都没有诞生,父类调用子类的override函数不合理)//很像Template Methodi<4;i++){protected:protected:将House的表示及构造进行拆分,即House和HouseBuilder;原创 2023-10-11 23:48:38 · 23 阅读 · 0 评论 -
设计模式——08.Prototype原型模式
使用原型实例指定创建对象的种类,然后通过(深)拷贝这些原型来创建新的对象。//原型对象public://克隆原型//内存管理//具体类public:public:public:public://抽象类public://通过克隆自己来创建对象Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些**“易变类"拥有“稳定的接口"**。原创 2023-10-11 23:47:04 · 33 阅读 · 0 评论 -
设计模式——07.AbstractFactory抽象工厂
可以把工厂方法视为抽象工厂的一种特例,一起叫做工厂方法。提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。public:如果将MySql改为Oracle,SqlConnection、SqlCommand和SqlDataReader都要重写。程序不应该依赖于具体的数据库类型。//数据库访问有关的基类及其工厂//支持SQL Server或者Oracle(实际工程实现,以下四个放在另一文件中)原创 2023-10-11 23:45:44 · 25 阅读 · 0 评论 -
设计模式——06.FactoryMethod工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。public:private:public://依赖具体类使用抽象基类、抽象基类继承后的具体类、工厂基类、工厂基类继承后的具体类。原创 2023-10-11 23:44:16 · 20 阅读 · 0 评论 -
设计模式——05.Bridge桥模式
将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化,即“子类化”它们。Bridge模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。Bridge模式的应用一般在“两个非常强的变化维度。原创 2023-10-11 23:41:47 · 15 阅读 · 0 评论 -
设计模式——04.Decorator装饰模式
动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码子类个数通过采用组合而非继承的方法,Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承而带来的“灵活性差”和“多子类衍生问题”。Decorator类在接口上表现为is-aComponent的继承关系,即Decorator类继承了Component类所具有的的结构。但在实际表现上又表现为has-a。原创 2023-10-11 23:40:21 · 22 阅读 · 0 评论 -
设计模式——03.Observer/Event观察者模式
定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。使用面向对象的抽象,Observer模式使得我们可以**独立地改变(松耦合)**目标与观察者,从而使二者之间的依赖关系达致松耦合。目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。观察者自己决定是否需要订阅通知,目标对象对此一无所知。Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。原创 2023-10-11 23:36:55 · 63 阅读 · 0 评论 -
设计模式——02.Strategy策略模式
定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在**运行时**方便地根据需要在各个算法之间进行切换。Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。原创 2023-10-11 23:35:34 · 12 阅读 · 0 评论 -
设计模式——01.TemplateMethod模板方法
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。延迟到子类:定义可能变化的部分为一个虚函数,并让子类实现/重写这个虚函数。Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。原创 2023-10-11 23:34:07 · 14 阅读 · 0 评论 -
设计模式——00.概述与原理
软件设计的目标在于增加软件的复用性。分解:将大问题分解为多个小问题,复杂问题分解为多个简单问题。抽象:将复杂对象忽略非本质的细节,抽象去处理泛化和理想化的对象模型。统一处理提高代码复用性什么是设计模式?每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样,你就能一次又一次地使用该方案而不用重复劳动,提高代码复用性。软件设计复杂的根本原因:变化客户需求变化技术平台变化开发团队变化市场环境变化而一个好的设计,在于软件的复用性。面向对象的复用性是指。原创 2023-10-11 23:29:19 · 25 阅读 · 0 评论