归一化设计,抽象类和接口类,接口隔离操作

一:什么叫归一化设计:

首先来看看下面这段程序:

class Alipay(Payment):
    def pay(self,money):
        print('使用支付宝支付了%s元'%money)

class QQpay:
    def pay(self,money):
        print('使用qq支付了%s元'%money)

def pay(a,money):
    a.pay(money)         #做归一化设计


a = Alipay()
pay(a,100) 
q = QQpay()
pay(q,100)
View Code

归一化设计就是要求:不管哪一个类的对象,都调用同一个函数去完成相似的功能。

ps:依赖倒置原则如下:

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

二:接口类和抽象类

1,抽象类与接口类就是建立规范的,制定一个类的metaclass是ABCMeta,那么这个类就变成了一个抽象类(接口类)。

2,抽象类中所有被abstractmethod装饰的方法都必须被继承的子类实现,如果不实现,那么在实例化阶段将会报错。

3,无论是抽象类还是接口类metaclass=ABCMeta 都不可以被实例化。

from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
    @abstractmethod
    def pay(self):pass  # 抽象方法

class Alipay(Payment):
    def pay(self,money):
        print('使用支付宝支付了%s元'%money)

def pay(a, money):
    a.pay(money)

a = Alipay()
pay(a,100)
View Code

三:接口隔离操作

1,什么叫接口?

python里并没有接口的概念,那接口是哪儿来的概念呢?因为java类没有多继承,接口可以实现多继承。而在python中,满足接口隔离原则,由于python本身支持多继承,所以就不需要接口的概念了.

2,抽象类和接口类在python中是相同的,都是用于约束子类中的方法的,只要是抽象类和接口类中被abstractmethod装饰的方法,都需要被子类实现。需要注意的是,当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束

3,在java中,抽象类和接口截然不同,抽象类的本质还是一个类,是类就必须遵循单继承的规则,所以一个子类如果被抽象类约束,那么它只能被一个父类控制,当多个类之间有相同的功能也有不同的功能的时候,java只能用接口来解决问题。

from abc import ABCMeta,abstractmethod
class FlyAnimal(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):pass
    @abstractmethod
    def cal_flying_speed(self):pass
    @abstractmethod
    def cal_flying_height(self):pass
class WalkAnimal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self):pass
class SwimAnimal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self):pass
class Tiger(WalkAnimal,SwimAnimal):
    def walk(self):pass
    def swim(self):pass
class Monkey:
    def walk(self):pass
    def climb(self):pass
class Swan(FlyAnimal,WalkAnimal,SwimAnimal):
    def swim(self):pass
    def walk(self):pass
    def fly(self):pass
    def cal_flying_speed(self):pass
    def cal_flying_height(self):pass
class Parrot(FlyAnimal):
    def fly(self):pass
    def cal_flying_speed(self):pass
    def cal_flying_height(self): pass
View Code

 ps:接口隔离原则如下:

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

 

转载于:https://www.cnblogs.com/leiwei123/p/8856408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值