1.概念
- 高层模块不应该依赖底层模块,这两个都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
什么叫高层次模型,通常所说的客户端就是高层次模型,而其调用的接口即是低层次的模型,这句话也可以说,客户端不应该依赖于接口的具体,而是依赖于接口的抽象。
2.里氏代换原则
-
3. 针对抽象编程
-
4.代码实现
``` import abc
class Car(object): metaclass = abc.ABCMeta
@abc.abstractmethoddef car_run(self, *args, **kwargs):pass@abc.abstractmethoddef car_turn(self, *args, **kwargs):pass@abc.abstractmethoddef car_stop(self, *args, **kwargs):pass
class Ford(Car): def init(self): self.type = ‘ford’
def car_run(self):print('%s is running' % self.type)def car_turn(self):print('%s is turning' % self.type)def car_stop(self):print('%s is stopping' % self.type)
class Buick(Car): def init(self): self.type = ‘buick’
def car_run(self):print('%s is running' % self.type)def car_turn(self):print('%s is turning' % self.type)def car_stop(self):print('%s is stopping' % self.type)
class Cadillac(Car): def init(self): self.type = ‘cadillac’
def car_run(self):print('%s is running' % self.type)def car_turn(self):print('%s is turning' % self.type)def car_stop(self):print('%s is stopping' % self.type)
class AutoSystem(object):
def __init__(self, car):self.car = cardef car_run(self):self.car.car_run()def car_turn(self):self.car.car_turn()def car_stop(self):self.car.car_stop()
if name == ‘main‘: ford = Ford() buick = Buick() cadillac = Cadillac() autosystem = AutoSystem(ford) autosystem.car_run() autosystem.car_turn() autosystem.car_stop() autosystem.car = buick print(‘‘100) autosystem.car_run() autosystem.car_turn() autosystem.car_stop() print(““100) autosystem.car = cadillac autosystem.car_run() autosystem.car_turn() autosystem.car_stop() ```
