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

    最近打算重构部分python项目,有道是"工欲善其事,必先利其器",所以有必要梳理一下相关设计模式。每次回顾基本概念或底层实现时都会有一些新的收获,希望这次也不例外。

    本系列打算先简略介绍面向对象语言的通用特性作为铺垫,这也是设计模式的基础,然后详细介绍python相关的设计模式,辅以简单、易懂、常用的实例,最后略作总结。因为后续会分篇具体介绍各个设计模式的python实现,所以相应的链接会持续更新。

    设计模式的优点                                                                                                                                                          

    为啥一定要使用设计模式呢?给个理由先:

      - 复用成熟的解决方案:设计模式本身就是前人成功经验的提炼和总结,我们可以从中获益、少踩坑

      - 便于开发过程中的通用术语交流: 设计模式在项目分析和设计阶段提供了共通的交流基准

      - 类或对象之间的松耦合:松耦合带来的明显好处是易维护

      - 面向接口编程:此特性的优点在于易扩展,灵活性好

      - 深入理解面向对象体系:通过对设计模式的细节挖掘,可以更透彻地理解面向对象体系的设计原理及具体实现

    面向对象综述                                                                                                                                                             

    面向对象通过类来实现对万事万物的抽象,包含三个重要特性:封装,继承和多态。这正是这三个特性衍生出多种多样的设计模式及类与类之间的关系。

      - 封装:将类的某些信息隐藏在类的内部,限制外部使用者的直接访问,只允许通过类提供的方法实现对隐藏信息的访问和操作,隔离变化

      - 继承:对多个类型进行共性抽取形成父类,被共性抽取的多个类就是该父类的子类,共性抽取、父类和子类就是继承的要素

      - 多态:一个事物具有的多种形态。实现多态的方式有两种:覆写 & 重载

    在如上三种特性基础上可以扩展出类与类之间六种不同的关系,总览中只简述,详情参考链接

      - 依赖关系(Dependency): 在局部变量,方法的形参,或者对静态方法的调用中实现

      - 关联关系(Association): 在类的成员变量中实现,可以双向也可以单向

      - 聚合关系(Aggregation): 强关联,整体与部分的关系,但是可分离、生命周期相互独立

      - 组合关系(Composition): 更强关联,整体与部分的关系,不可分离、生死与共

      - 继承关系(Generalization):类与类,或接口与接口之间的父子关系

      - 实现关系(Implementation): 接口或抽象类定义好的操作集合,由实现类完成接口或抽象类的具体操作

    Python对象特性                                                                                                                                                         

    Python与设计模式相关的对象特性跟Java略有不同,python本身是动态语言,无interface且支持多重继承;而Java是静态强类型语言,有interface且只支持单继承。

      - 动态语言: 运行中可以动态地改变类的内部结构,如鸭子类型的应用

      - 弱类型语言(?): 这一点多少还是有争议的。从“变量类型由其值的类型决定”角度来说,python是弱类型语言;从“类型安全”的角度来说,python是强类型语言

      - 无Interface: python中没有类似java中的interface,所以需要面向接口编程时更多采用抽象类

      - 多重继承: python允许子类有多个父类,使用多重继承时需注意继承顺序,建议谨慎使用。

    设计模式七大原则                                                                                                                                                         

    如何设计出简洁、易懂、灵活、优美的代码结构的确是一门学问,透彻理解并践行如下七大原则通常都能取得基本满意的结果。总览中只简述,详情参考链接

      - 单一职责原则(Single Responsibility Principle):一个类负责一项职责,单纯的快乐

      - 开放关闭原则(Open-Closed Principle):对扩展开放,对修改关闭

      - 里氏替换原则(Liskov Substitution Principle):继承与派生的规则,子类可替换父类

      - 依赖倒转原则(Dependence Inversion Principle):高层模块不应该依赖于底层模块,二者都应该依赖于抽象

      - 接口隔离原则(Interface Segregation Principle):建立单一接口,尽量细化接口,接口中的方法越少越好

      - 迪米特法则(Law Of Demeter):高内聚,低耦合

      - 组合/聚合复用原则 (Composition/Aggregation Reuse Principle):尽量使用组合/聚合,最好不要使用继承,尤其是多重继承

    Python设计模式的分类                                                                                                                                              

    上面说了那么多只是引子,方便我们理解设计模式的基础概念和基本原则,接下来介绍python设计模式的分类及实现。当然此处仅为模式列表,详情点击相关链接。

      - 前导

           - Python设计模式 - 基础 - 封装 & 继承 & 多态

           - Python设计模式 - 基础 - 类与类之间的六种关系

           - Python设计模式 - 基础 - 七大基本原则

      - UML

           - Python设计模式 - UML - 类图(Class Diagram) 

           - Python设计模式 - UML - 对象图(Object Diagram)

           - Python设计模式 - UML - 包图(Package Diagram)

           - Python设计模式 - UML - 用例图(Use Case Diagram)

           - Python设计模式 - UML - 状态图(State Machine Diagram)

           - Python设计模式 - UML - 时序图(Sequence Diagram)

           - Python设计模式 - UML - 组件图(Component Diagram)

           - Python设计模式 - UML - 部署图(Deployment Diagram)

           - Python设计模式 - UML - 活动图(Activity Diagram)

           - Python设计模式 - UML - 通信图(Communication Diagram)

           - Python设计模式 - UML - 组合结构图(Composite Structure Diagram)

           - Python设计模式 - UML - 交互概述图(Interaction Overview Diagram)

           - Python设计模式 - UML - 定时图(Timing Diagram)

           

      - 分类

      - Python设计模式 - 创建型 - 单例模式(Singleton) - 十种

      - Python设计模式 - 创建型 - 简单工厂(Factory)

      - Python设计模式 - 创建型 - 工厂方法(Factory Method)

      - Python设计模式 - 创建型 - 抽象工厂(Abstract Factory)

      - Python设计模式 - 创建型 - 建造者(Builder)

      - Python设计模式 - 创建型 - 原型(Prototype)

      - Python设计模式 - 结构型 - 适配器(Adapter)

      - Python设计模式 - 结构型 - 桥接(Bridge)

      - Python设计模式 - 结构型 - 装饰(Decorator)

      - Python设计模式 - 结构型 - 组合(Composite)

      - Python设计模式 - 结构型 - 外观(Facade)

      - Python设计模式 - 结构型 - 享元(Flyweight)

      - Python设计模式 - 结构型 - 代理(Proxy)

      - Python设计模式 - 行为型 - 模板方法(Template Method)

      - Python设计模式 - 行为型 - 观察者(Observer)

      - Python设计模式 - 行为型 - 状态(State)

      - Python设计模式 - 行为型 - 策略(Strategy)

      - Python设计模式 - 行为型 - 责任链(Chain of Responsibility)

      - Python设计模式 - 行为型 - 命令(Command)

      - Python设计模式 - 行为型 - 访问者(Visitor)

      - Python设计模式 - 行为型 - 中介者(Mediator)

      - Python设计模式 - 行为型 - 备忘录(Memento)

      - Python设计模式 - 行为型 - 迭代器(Iterator)

      - Python设计模式 - 行为型 - 解释器(Interpreter)

      - Python设计模式 - 其他 - 空对象(Null Object)

      - Python设计模式 - 其他 - 对象池(Object Pool)

      - Python设计模式 - 其他 - 图搜索(Gragh Search)

      - Python设计模式 - 其他 - 不可变(Immutable)

      - Python设计模式 - 其他 - 黑板(Blackboard)

      - Python设计模式 - 其他 - 雇工(Servant)

      - Python设计模式 - 其他 - 过滤器(Filter)

      - Python设计模式 - 其他 - 共享(Borg)

      - Python设计模式 - 总结

      - 内置

           

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/coolstream/p/9498295.html
Copyright © 2011-2022 走看看