设计模式

一、什么是设计模式?
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。”
每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。

GoF(Gang of Four)
设计模式四个基本要素:模式名称、问题、解决方案、效果

二、设计模式七大原则
1、开放封闭原则:一个软件实体如类,模块和函数应该对扩展是开放的,对修改是关闭的。即软件实体应尽量在不修改原有代码的情况下进行扩展(装饰器)
2、里氏替换原则:重写父类里面的方法,逻辑可能不一样,但是返回的结果参数啥的要一样(所有引用基类的地方必须能透明的使用其子类的对象)
3、依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象,要针对接口编程,而不是针对实现编程。(接口类)
4、接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要实现的接口
5、迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用
6、单一职责原则:一个类只负责一项职责(不要存在多于一个导致类变更的原因,即一个类只负责一项职责)
7、合同复用原则:多用组合少用继承
一个类重用另一个类的代码有两种方式
  --1.继承
  --2.组合

#假如说现在有这样的动物类
from abc import abstractmethod,ABCMeta   #借助abc模块来实现接口
#接口类就是为了提供标准,约束后面的子类

# class Animal(metaclass=ABCMeta):
#     @abstractmethod
#     def walk(self):
#         pass
#
#     @abstractmethod
#     def fly(self):
#         pass
#
#     @abstractmethod
#     def swim(self):
#         pass
#
# class Frog(Animal):
#     '''像是这样定义一个青蛙类,由于接口类的方法都要被实现,而青蛙只会走,没不要要实现其他的方法
#     动物不同会的功能也会不同,所以这时候我们就可以选择用接口隔离原则
#     '''
#     def walk(self):
#         print('青蛙会走')
#
# obj = Frog()
# obj.walk()   #会报错


# =====================改进-=================
class AnimalOnLand(metaclass=ABCMeta):
    '''在陆地上的动物'''
    @abstractmethod
    def walk(self):
        pass

class AnimalInSky(metaclass=ABCMeta):
    '''飞行动物'''
    @abstractmethod
    def fly(self):
        pass

class AnimalInWater(metaclass=ABCMeta):
    '''在水里的动物'''
    @abstractmethod
    def swim(self):
        pass

class Tiger(AnimalOnLand):
    def walk(self):
        print('老虎在地上')

class Frog(AnimalOnLand,AnimalInWater):
    def swim(self):
        print('青蛙会游')

    def walk(self):
        print('会跳')

obj = Tiger()
obj.walk()

obj = Frog()
obj.walk()
obj.swim()
接口隔离原则
# 合同复用原则:多用组合少用继承
class A:
    def test(self):
        return '你好啊'

class B(A):  #继承
    def test(self):
        return 123

class C:
    def __init__(self):
        self.a = A()   #组合
        self.a.test()

    def test(self): 
        return 789

print(B().test())

print(C().a)
print(C().a.test())
print(C().test())
继承和组合

三、设计模式分类
1、创建型模式 
①简单工厂模式
②工厂方法模式
③抽象工厂模式
④创建者模式
⑤原型模式
⑥单例模式

总结创建型模式:
  --依赖于继承的创建型模式:工厂方法模式
  --依赖于组合的创建型模式:抽象工厂模式,创建者模式

2、行为型模式 
①解释器模式
②责任链模式
③命令模式
④迭代器模式
⑤中介者模式
⑥备忘录模式
⑦观察者模式
⑧状态模式
⑨策略模式
⑩访问者模式
⑪模板方法模式

3、结构性模式 
①适配器模式
②桥模式
③组合模式
④装饰模式
⑤外观模式
⑥享元模式
⑦代理模式

原文地址:https://www.cnblogs.com/liwei1153300111/p/8074931.html