zoukankan      html  css  js  c++  java
  • python 设计模式 开篇 第1篇

    1. 设计模式的定义

    软件设计中普遍存在的 反复出现的 各种问题 所提出的解决方案

    首先,什么是软件设计?
    系统开发 项目开始的时候 需要做 需求分析 软件系统设计 软件建模 类的设计 接口的设计 等等。。。
    设计模式解决的就是 软件设计 过程中出现的问题 这类问题 经常出现 反复遇到 因此 前人就总结 出了 应对这类问题的23种套路
    感兴趣可以找一本书 《设计模式:可复用面向对象软件的基础》

    2. 面向对象基础

    设计模式 是 用于解决 软件建模过程中 设计类 设计接口 遇到的普遍问题,因此有必要复习一下 面向对象的知识
    三大特性:
    封装
    将 方法,属性 封装到一个类 中,通过对象来访问或者调用 类或对象的属性以及方法,类 里面的方法 有 私有方法 公有方法,这个知识点 可以自行了解一下
    继承
    实现类与类之间的代码的复用, 猫,狗,都有吃,睡的方法,既可以抽象 成一个 宠物的类
    多态
    这个 就有点复杂 不好解释

    3. 接口

    接口 这个词 对于开发人员来讲 是每天都听到的词 对外暴露的 供调用者 调用的方法
    定义:若干抽象方法的集合

    4 python 实现接口定义的两种常用方式

    4.1 通过 父类 中 抛出NotImplementedError 定义子类必须要实现的 方法 实现接口的定义

    这样定义接口的话 如果不调用 接口 只是 实例化一个对象的话 不会报错的 因此 接口的定义还不是很严密

    class Payment:
        def pay(self, money):
            raise NotImplementedError
    
    
    class Alipay(Payment):
    
        def pay(self, money):
            print("Ali payed %d" % money)
    
    
    class WechatPay:
    
        def pay(self, money):
            pass
    
    
    if __name__ == '__main__':
        p = Alipay()
        p.pay(100)
    

    4.2 通过 抽象类 实现接口的定义

    from abc import ABCMeta, abstractmethod
    
    
    class Payment(metaclass=ABCMeta):
    
        @abstractmethod
        def pay(self, money):
            pass
    
    
    class Alipay(Payment):
    
        def pay(self, money):
            print("Alipay pay %d" % money)
            
    
    class WechatPay(Payment):
    
        def pay(self, money):
            print("Wechat pay %d" % money)
    
    
    if __name__ == '__main__':
        p = Alipay()
        p.pay(100)
    
    
  • 相关阅读:
    还在纠结注册.com域名还是.cn域名?
    网站域名被墙的检测查询和解决办法
    阿里云服务器无法远程其他的mysql服务器
    如何维护一个产品
    使用bootstrap+asp.net mvc4+IBatis.Net实现的小程序
    bootstrap IE兼容
    mongodb命令使用
    聊天工具实现winform端实现
    二级域名设置
    org
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14708329.html
Copyright © 2011-2022 走看看