zoukankan      html  css  js  c++  java
  • 面向对象与设计模式

    参考:https://www.jianshu.com/p/bf92927c9d22

    (一)OO基础:

    抽象

    封装

    继承

    多态

    (二)OO原则

    面向对象原则让我的程序模块达到“高内聚低耦合”.高内聚是指某个特定模块(程序,类型)都应完成一系列相关功能,高内聚意味可维护性,可重新性,因为模块对外部的依赖少(功能的完备性)。耦合是描述模块之间的依赖程度,低耦合则意味着修改另一个类不会影响其他类.

    实现高内聚低耦合:行之有效的方式是分了关注点(SOC),将系统拆分成功能不同没有重叠功能集。每个功能只关注一个方面(Aspect)保证模块之间功能没有或者尽量少的重复。模块化内部实现细节隐藏,只暴露必须的接口,使得模块之间依赖于抽象,达到稳定。

    1单一职责原则 

    全称:“Single-Responsibility Principle” 

    说明:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。 

    SRP优点:消除耦合,减小因需求变化引起代码僵化。

    2、开闭原则 

    全称:“Open-Closed Principle” 

    说明:对扩展开放,对修改关闭。 

    优点:降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。 

    3、 里氏代换原则 

    全称:“Liskov Substitution Principle” 

    说明:子类型必须能够替换它们的基类型。 

    优点:可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉。 

    4、依赖倒转原则

    全称:“Dependence Inversion Principle”

    说明:要依赖于抽象,不要依赖于具体。要针对接口编程,不针对实现编程。

    优点:依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。

     

    5、接口隔离原则

    全称:“Interface Segregation Principle”

    说明:使用多个专一功能的接口比使用一个的总接口总要好。

    优点:会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里。

    6、迪米特原则(最少知道原则)

    全称:“Law of Demeter”

    说明:对象与对象之间应该使用尽可能少的方法来关联,避免千丝万缕的关系。

    -------------------------------------分割线-------------------------------------------

    7、 合成复用原则 

    全称:“Favor Composition Over Inheritance” 

    说明:尽量使用合成/聚合,尽量不要使用类继承 。 

    优点:可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉。 

     

    8 、封装变化

    全称:“Encapsulate What Changes”

    把您认为或怀疑将来要被修改的代码封装起来,这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。

    (三)设计模式

    参考1:http://www.cnblogs.com/xing901022/category/597988.html

    参考2:http://www.runoob.com/design-pattern/design-pattern-intro.html

    GOF四人组的23种设计模式总体来说分为三大类: 

    创建型模式,主要用于创建对象同时隐藏创建逻辑的方式。共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 

    结构型模式,用于处理类或对象的组合。共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 

    行为型模式,用于描述类或对象之间怎样交互和怎么分配职责。共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 

    序号模式 & 描述包括
    1 创建型模式
    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
    • 单例模式(Singleton Pattern)
    • 工厂方法模式(Factory  Method  Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 建造者模式(Builder Pattern)
    • 原型模式(Prototype Pattern)
    2 结构型模式
    这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
    • 适配器模式(Adapter Pattern)
    • 代理模式(Proxy Pattern)
    • 桥接模式(Bridge Pattern)
    • 过滤器模式(Filter、Criteria Pattern)
    • 组合模式(Composite Pattern)
    • 装饰器模式(Decorator Pattern)
    • 外观模式(Facade Pattern)
    • 享元模式(Flyweight Pattern)
    3 行为型模式
    这些设计模式特别关注对象之间的通信
    • 观察者模式(Observer Pattern)
    • 策略模式(Strategy Pattern
    • 责任链模式(Chain of Responsibility Pattern)
    • 命令模式(Command Pattern)
    • 解释器模式(Interpreter Pattern)
    • 迭代器模式(Iterator Pattern)
    • 中介者模式(Mediator Pattern)
    • 备忘录模式(Memento Pattern)
    • 状态模式(State Pattern)
    • 空对象模式(Null Object Pattern)
    • 模板模式(Template Pattern)
    • 访问者模式(Visitor Pattern)
         

     

  • 相关阅读:
    hdu 2732 Leapin' Lizards 最大流 拆点 建图
    Atcoder CODE FESTIVAL 2017 qual C D
    Codeforces Round #442 Div.2 A B C D E
    hdu 3549 Flow Problem 最大流 Dinic
    2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest I. Photo Processing
    Atcoder CODE FESTIVAL 2017 qual C C
    2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest A E F G H I K M
    hdu 5952 Counting Cliques 求图中指定大小的团的个数 暴搜
    TensorFlow深度学习,一篇文章就够了
    Vim常用的基本操作
  • 原文地址:https://www.cnblogs.com/wytiger/p/5263348.html
Copyright © 2011-2022 走看看