什么是设计模式?

一、啥是设计模式

  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、行为型模式

  • 解释器模式
  • 责任链模式
  • 命令模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 访问者模式
  • 模板方法模式
原文地址:https://www.cnblogs.com/skiler/p/6934656.html