首页 > 代码库 > 课堂作业06--23中设计模式

课堂作业06--23中设计模式

  设计模式用于软件设计中对于对于代码的重复利用,以及使得软件设计更加灵活。

  定义:一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

  设计模式根据目的可分为:创建型、结构型、行为型。创建型模式主要用于创建对象;结构型模式主要用于处理类和对象的组合;行为型模式主要用于描述对类或对象怎么交互和怎么分配职责。

  

  创建型模式:

  1.简单工厂

  简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

  2.工厂方法模式

    是简单工厂模式的延伸。工厂父类负责定义创建产品对象的公共接口,而子工厂负责具体生产具体的产品对象。所谓的决定并不是批模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需知道创建的产品是哪一下,选择了使用哪个子类,就决定了实际创建的产品是什么。

  3.抽象工厂模式

  在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决接口选择的问题。

  4.建造者模式

  将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

  5.原型模式

  用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。既能用于创建重复的对象,同时又能保证性能。主要解决:在运行期建立和删除原型。

  6.单例模式

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  结构型模式

  1.适配器模式

  将一个接口转化为客户希望的另一个接口,适配器模式使接口不兼容的类一起工作。是两个不兼容类的桥梁。主要解决:在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。

  2.桥接模式

  将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

  3.组合模式

  组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

  4.装饰模式

  动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

  5.外观模式

  为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

  6.享元模式

  运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

  7.代理模式

    为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题。

行为型模式

  1.职责链模式

  避免请求发送方与接收方耦合在一起,让多个对象都可以接收请求,将这些对象连接一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

  2.命令模式

    将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

  3.解释器模式

    给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。

  4.迭代器模式

  提供了一种方法访问聚合对象,而不用暴露这个对象的内部表示。主要解决:不同的方式来遍历整个整合对象。主要解决:不同的方式来遍历整个整合对象。

  5.中介者模式

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

  6.备忘录模式

    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

  7.观察者模式

  定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

  8.状态模式

  允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。

  9.策略模式

  定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

  10.模板方法模式

  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。

  11.访问者模式

  主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。

  就目前写的XXXX系统会用到单例模式以及抽象工厂方法,用于定义一个interface包在其他类包中来实现该接口,在传输到字段中使用单例模式。

课堂作业06--23中设计模式