我们在上个学期的课上已经学过了设计模式,但是都是在系统学习的基础上去认识软件设计模式的。所以后来在网上查了很多资料增加了很多自己的认识。
模式的含义其实就是对前人经验的总结,设计模式初期也是起源于建筑领域,它的目的就是为后人设计与开发基于面向对象的软件提供指导方针和成熟的解决方案,可以被认为是对软件开发这一问题的解法的某种统一表示,是在一定条件下出现的问题以及解法。
设计模式有一个定义:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式主要是根据目的分类,可以分成创建型、结构型和行为型。一共是24种设计模式,接下来就谈谈我认识的24种设计模式。
简单工厂模式,属于创建型模式。为了需要创建一些来自于相同父类的类的实例,专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类,将创建其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象。
工厂方法模式,属于创建型模式。在简单工厂模式中,虽然可以满足要求,但是却有一个缺点就是违背了“开闭原则”。在简单工厂模式中,具体产品与工厂类之间的耦合度太高,严重影响了系统的灵活性和扩展性,但是工厂模式中新添了一个具体产品类。我们先定义一个抽象的工厂类,再定义具体的工厂类来生成具体实现,它们实现在抽象工厂类中定义的方法。在工厂模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类就是负责生成具体的产品对象,这个方法实现的是通过工厂子类可以确定究竟应该实例化哪一个具体产品类。
抽象工厂模式,创建型模式。抽象工厂模式实际上是泛化的工厂模式。在抽象工厂模式中的具体产品类可以生产多个具体产品。提供一个创建一系列相关或相互依赖对象的接口,并不需要定义它们具体的类,这就是抽象工厂模式。
建造者模式,创建型模式。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
原型模式,创建型模式。原型模式结构比较简单,通过复制原型创建新的对象。定义一个可以复制自己方法的接口,作为具体原型类的父类,可以使抽象类也可以是接口,然后具体原型类通过继承实现父类的方法,返回一个复制的对象即可。
单例模式,创建型模式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,也就是单例类,它提供了全局访问的方法。
适配器模式,结构型模式。适配器模式将一个接口转换成客户需要使用的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。换句话说,就是当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法。
,结构型模式。桥接模式将抽象部分与实现部分分离,使它们都可以独立地变化,将继承关系转换为了关联关系,从而降低了类与类之间的耦合。
组合模式,结构型模式。组合模式组合了多个对象形成树形结构来表示“整体-部分”的结构层次。它将单个对象和组合对象的使用一致化,将对象组织到树结构中。
装饰模式,结构型模式。在被装饰的类中调用在装饰器类中定义的方法,实现更多更复杂的功能,也就是说装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。
外观模式,结构型模式。外观模式定义了一个高层接口一个统一的接口,使得外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面。就像是一个网站,我们用户都是通过首页进入任意的子栏目的,并不需要记住每一个子栏目的地址进入。
享元模式,结构型模式。系统只使用少量的很相似、状态变化很小,可以实现对象多次复用的对象。运用共享技术有效地支持大量细粒度对象的复用。
代理模式,结构型模式。如果一个客户并不想直接引用一个对象,就可以通过一个称之为“代理”的第三者来实现间接引用。代理对象其实可以看做在客户端和目标对象之间起到中介的作用。给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
职责链模式,行为型模式。职责链可以使一条直线,一个环或者一个树形结构,沿着这条单向的链来传递请求,而链上的每一个对象都是请求处理者,职责链模式将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理。职责链模式避免了请求发送者与接受者发生碰撞,使多个对象都有可能接受请求,进行相应的处理。
命令模式,行为型模式。命令模式将发送者与接收者完全解耦,使两者之间没有直接引用的关系。命令模式将一个请求封装为一个对象,从而使我们可以使用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
解释器模式,行为型模式。定义语言的文法,并且建立一个解释器来解释该语言中的句子,这个“语言”的含义就是使用规定格式和语法的代码。
迭代器模式,行为型模式。举个例子,如果将电视机看成一个视频频道的集合,那么迭代器就相当于是电视机遥控器。我们可以通过遥控器对电视频道进行操作。迭代器模式提供了一种方法来访问聚合对象,但是不用暴露对象的内部表示。
中介者模式,行为型模式。顾名思义,就是通过一个中介者中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,可以独立地改变它们之间的交互。
备忘录模式,行为型模式。就像是可以撤销历史操作一样的功能,备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。
观察者模式,行为型模式。将发生改变的对象成为观察目标,而被通知的对象称为观察者。观察者模式定义了一种对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关的依赖对象可以得到通知并被自动更新。
状态模式,行为型模式。一个对象在其内部的状态发生改变时要改变它的行为,即状态和行为不可以分离。
策略模式,行为型模式。定义一系列算法,并且进行封装,这样就可以让它们进行相互替换。保证这些策略的一致性,使用一个抽象类做算法的定义。
模板方法模式,行为型模式。定义一个操作中算法的骨架,作为父类模板,在子类中不改变一个算法的结构只是进行重定义该算法的某些特定步骤完成具体算法。
访问者模式,行为型模式。封装一些施加于某种数据结构元素之上的操作,一旦操作被修改,可以保持结构不变,使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
以上就是24种我认识的设计模式。