Python面向对象的五大设计原则---SOLID原则

💖 作者:大家好,我是阿旭😜
🎉 支持我:点赞👍收藏⭐️留言📝
📣 系列专栏:23种设计模式详解-Python 🍁

首字母指代概念
S单一职责原则对象只有一种单一功能
O开闭原则对扩展开放,对修改禁止
L里氏替换原则对象应该是可以在不改变程序正确性的前提下被它的子类所替换
I接口隔离原则多个特定客户端接口要好于一个宽泛用途的接口
D依赖倒置原则一个方法应该遵从依赖于抽象而不是一个实例

1.Single:单一功能原则

不要存在导致类变更的原因,通俗的说是:一个类只负责一项职责。

class User:
    pass


class Pay:
    pass

可以看到我在这里定义了两个类分别为用户类和支付类,当有需求改变时,你只能是用户需求改变用户类,支付需求改变支付类,确保一个类只负责一项职责。

2.Open:开闭原则

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。通俗的说是:软件实体应在不修改原有代码的基础上进行扩展。(尽量不改,具体情况随机应变。)

3.Liskov:里氏替换原则

所有引用父类的地方必须能透明的使用其子类的对象。通俗的说是:有一段代码在使用父类对象没问题的情况下,使用字类对象也是肯定没问题的。

class User:
    pass

class VIPUser(User):
    pass

def show_user(u):
    return u.name

这里我们创建了User类,并创建了User类的字类VIPUser,当我们在使用show_user方法时,一定保证传入两种类型的user都能成功。

4.Interface:接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些他不需要的接口。

from abc import ABCMeta, abstractmethod

class Animal(metacalss=ABCMeta):
    @abstractmethod
    def walk(self):
        pass
   
    @abstractmethod
    def swim(self):
        pass
    
    @abstractmethod
    def fly(self):
        pass
    

 我们在这里定义了一个动物移动方式的抽象接口类,当我们在定义单个动物类继承它的时候,你会发现walk、swim、fly都需要在子类中重新定义,但是有的动物并不是可以走、游、飞,这样程序就会出现错误,所以我们应该改为:

from abc import ABCMeta, abstractmethod

class WalkAnimal(metacalss=ABCMeta):
    @abstractmethod
    def walk(self):
        pass
   
class SwimAnimal(metacalss=ABCMeta):
    @abstractmethod
    def swim(self):
        pass
    
class FlyAnimal(metacalss=ABCMeta):
    @abstractmethod
    def fly(self):
        pass
    

这样的就可以遵循我们的接口隔离原则,不同的字类可以继承一个或者多个父类。

5.Dependency:依赖倒置原则

高层模块不应该依赖底层模块,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。

from abc import ABCMeta, abstractmethod

# 接口
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


# 底层代码1
class AliPay(Payment):
    def pay(self, money):
        print("支付宝支付%d元" % money)


# 底层代码2
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元" % money)
  • 当我们的接口定义好时,底层代码和高层代码可同时进行。底层代码仿照接口类中方法进行定义,高层代码依照接口类中的方法进行调用,所以说二者都应该依赖其抽象接口。
  • 底层代码为细节,它们需要依赖抽象接口。

订阅专栏,每天学习不同的Python设计模式✌️

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxlo0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值