zoukankan      html  css  js  c++  java
  • 设计模式

    23种设计模式(设计模式主要分三类:创建型,结构型和行为型)

    创建型:

    1 单例模式(Singleton):保证一个类只有一个实例,并提供一个访问它的全局访问点。

    2 抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体的类。

    3 工厂方法(Factory Method):定义一个用于创建对象的方法,让子类决定创建哪一个类,工厂方法使一个类的实例化延迟到了子类。

    4 建造模式(Builder):将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建出不同的对象。

    5 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

    行为型:

    6 迭代器模式(Iterator):提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

    7 观察者模式(Observer):定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象得到通知自动更新。

    8 模版方法(Template Method):定义一个操作方法中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构就可以得到重新定义该算法。

    9 命令模式(Command):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和纪录请求日志,以及支持可撤销的操作。

    10 状态模式(State):允许对象在其内部状态改变时改变它的行为。对象看起来似乎改变了它的类。

    11 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并使它们可以互相替换,本模式使得算法可以独立于使用它们的客户。

    12 指责链模式(Chaina Of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合。

    13 中介者模式(Mediator):用一个中介对象封装一系列的对象交互。

    14 访问者模式(Visitor):表示一个作用于某对象结构中的各元素操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

    15 解释器模式(Interpreter):给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

    16 备忘录模式(Mementor):在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

    结构型:

    17 组合模式(Composite):将对象组合成树形结构以表示部分整体的关系,使得用户对单个对象和组合对象的使用具有一致性。

    18 外观模式(Facade):为子系统中的一组接口提供一致的界面,外观模式提供了一高层接口,这个接口使得子系统更容易使用。 

    19 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问 。

    20 适配器模式(Adapter):将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(协议)

    21 装饰模式(Decorator):动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。(类别)

    22 桥接模式(Bridge):将抽象部分与它的实现部分相分离,使他们可以独立的变化。

    23 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。

    6种设计原则(http://www.uml.org.cn/sjms/201211023.asp#1)

    1 单一职责原则(实现类要职责单一)

        优点:(1)可以降低类的复杂度,一个类只负责一个职责,其逻辑肯定要比负责多个职责简单的多。

        (2)提高类的可读性,提高系统的可维护性。 

        (3)变更引起的风险降低,变更是必然的,如果单一职责原则遵循的好,当修改一个功能时,可以显著降低对其他功能的影响。

    2 里氏替换原则(不要破环继承体系,子类父类可以相互替代)

        里氏替换原则通俗的来讲就是:子类可以扩展父类的方法,但是不能改变父类原有的功能。它包含以下四层含义:

    (1)子类可以覆盖父类的抽象方法,但是不能覆盖父类的非抽象方法。

    (2)子类中可以增加自己特有的方法。

    (3)当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的

              输入参数更宽松。

    (4)当子类方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更

              严格。

    3 依赖倒置原则(面向接口编程)

    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节

    应该依赖抽象。

            依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽

    象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定的多。抽象指的是接口或

    者抽象类,细节就是具体的实现类。使用接口或者抽象类的目的就是制订好规范和契约,而

    不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。依赖倒置原则的核

    心就是要面向接口编程。

    (1)低层模块尽量都要有抽象类或接口,或者两者都有。

    (2)变量的声明类型尽量都是抽象类或者接口。

    (3)使用继承时遵循里氏替换原则。

    4 接口隔离原则(接口设计要精简单一)

    定义:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

    注意:

    (1)接口尽量小,但是要有限度。对接口进行细化可以提高程序设计的灵活性,但是如果过小,则会造成接口数量多,使设计负责化。所以一定要适度。

    (2)为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只要专注地为一个模块提供定制服务,才能建立最小的依赖关系。

    (3)提高內聚,减少对外交互。使接口用最少的方法去完成最多的事情。

    5 迪米特法则(降低耦合)

    定义:一个对象应该对其他对象保持最少的了解。尽量降低类与类之间的耦合。

    6 开闭原则(对扩展开放,对修改关闭)

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

  • 相关阅读:
    云原生网关 Kong 和Kong 管理UI 的完全安装攻略
    微服务最强开源流量网关Kong
    如何在java中判断一个字符串是否是数字
    设计模式之责任链模式讲解
    我的第一个react native
    封装缓动动画3
    封装缓动动画2
    封装缓动动画1
    获取用户选中的文字内容
    窗口事件onresize
  • 原文地址:https://www.cnblogs.com/muzijie/p/5621661.html
Copyright © 2011-2022 走看看