zoukankan      html  css  js  c++  java
  • 什么是设计模式?

    一、啥是设计模式

      Christopher Alexander说过,模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。

      每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。

      设计模式四个基本要素:模式名称、问题、解决方案、效果

    二、对象/类

      封装:把属性和方法,封装到对象里面,就可以通过对象来调用。私有方法封装在类里面,外界不可见

      继承:子类可以直接使用父类拥有的属性和方法

      多态:

    三、接口

      一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法。对子类的形成约束

      作用:限制继承接口的类的方法的名称及调用方式;隐藏类的内部实现

      

    利用raise方法,抛出异常

    #!/usr/bin/env python
    # -*- coding: utf8 -*-
    # __Author: "Skiler Hao"
    # date: 2017/6/2 15:45
    
    
    class Payment:
        def pay(self,money):
            raise NotImplementedError
    
    
    class AliPay(Payment):
        def pay(self,money):
            print("支付宝支付%s元" % money)
    
    
    class ApplePay(Payment):
        def pay(self,money):
            print("苹果支付支付%s元" % money)
    
    
    class WechatPay(Payment):
        pass
    
    WechatPay().pay(100)
    Python接口实现方式一

    利用abc包,实现接口

    #!/usr/bin/env python
    # -*- coding: utf8 -*-
    # __Author: "Skiler Hao"
    # date: 2017/6/2 15:45
    from abc import ABCMeta, abstractmethod
    
    
    class Payment(metaclass=ABCMeta):
        @abstractmethod
        def pay(self, money):
            pass
    
    
    class AliPay(Payment):
        def pay(self, money):
            print("支付宝支付%s元" % money)
    
    
    class ApplePay(Payment):
        def pay(self, money):
            print("苹果支付支付%s元" % money)
    
    
    class WechatPay(Payment):
        def zhifu(self):
            pass
    
    
    WechatPay()
    python接口实现方式二

    四、设计模式六大原则

    • 开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改源代码关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
    • 里氏(Liskov)替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。使用父类的地方,都可以使用子类。Python自动实现
    • 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。接口是沟通高层代码和底层代码的桥梁。使用时直接看高层的接口即可。
    • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。就是总接口尽量是多个。子类可以继承多个父类。
    • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用。解耦,解除类与类之间的关系。
    • 单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 

    五、设计模式的分类

    a、创建型模式:(用于创建对象)

    • 工厂方法模式(只有一类产品,但是这个产品有多种类型)
    • 抽象工厂模式(多类产品,可以组成一个整体,,每类产品有多种)
    • 创建者模式(多类产品,每类产品有一种)
    • 原型模式
    • 单例模式

    b、结构型模式

    • 适配器模式
    • 桥模式
    • 组合模式
    • 装饰模式
    • 外观模式
    • 享元模式
    • 代理模式

    c、行为型模式

    • 解释器模式
    • 责任链模式
    • 命令模式
    • 迭代器模式
    • 中介者模式
    • 备忘录模式
    • 观察者模式
    • 状态模式
    • 策略模式
    • 访问者模式
    • 模板方法模式
  • 相关阅读:
    plaidctf2015 uncorrupt png
    Tsinghua dsa pa2
    课上实验-小软件破解
    HBase Block Cache(块缓存)
    JVM垃圾回收(二)- Minor GC vs Major GC vs Full GC
    JVM垃圾回收(一)- 什么是垃圾回收
    HBase Region 各个状态的转换
    HBase架构
    用GraphX分析伴生网络(二)
    用GraphX分析伴生网络(一)
  • 原文地址:https://www.cnblogs.com/skiler/p/6934656.html
Copyright © 2011-2022 走看看