软件设计原则、设计模式学习+部分实现

| 软件代码开发技术 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/ |

| ----------------- |--------------- |

| 作业要求| https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833 |

| 作业目标 | 谈谈看过设计模式方面内容的心得体会 |

设计原则
为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则、
里氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则、最小知识原则。开闭原则具有理想主义的色彩,它是面向对象设计的终极目
标。其他几条,则可以看做是开闭原则的实现方法。设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。

  1. 开闭原则:模块应对扩展开放,而对修改关闭。模块应尽量在不修改原(是“原”,指原来的代码)代码的情况下进行扩展。
  2. 里氏代换原则:如果调用的是父类的话,那么换成子类也完全可以运行。
    可以说:里氏代换原则是继承复用的一个基础。
  3. 依赖倒转原则:抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对实现编程。传递参数,或者在组合聚合关系中,
    尽量引用层次高的类。
  4. 合成/聚合复用原则:
    合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能
    的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。就是说要少用继承,多用合成关系来实现。
  5. 接口隔离原则:
    定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。
    6.最少知识原则:一个对象应对其他对象有尽可能少的了解。

下面是几种设计模式python的实现。
1.单例模式:

 '''
 实现__new__方法,然后将类的一个实例绑定到类变量_instance上;
 如果cls._instance为None,则说明该类还没有被实例化过,new一个
 该类的实例,并返回;如果cls._instance不为None,直接返回_instance
 '''
class Singleton(object):
    def __init__(self):
        pass
    def __new__(cls, *args, **kwargs):
        if not hasattr(Singleton, "_instance"):
            Singleton._instance = object.__new__(cls)
        return Singleton._instance
obj1 = Singleton()
obj2 = Singleton()
print(obj1 is obj2)

2.工厂模式:

class Person:
    def __init__(self):
        self.name = None
        self.gender = None

    def getName(self):
        return self.name

    def getGender(self):
        return self.gender

class Male(Person):
    def __init__(self, name: str):
        super().__init__()
        print("Hello Mr." + name)

class Female(Person):
    def __init__(self, name: str):
        super().__init__()
        print("Hello Miss." + name)

class Factory:
    def getPerson(self, name: str, gender: str):
        if 'M' == gender:
            return Male(name)
        elif 'F' == gender:
            return Female(name)

factory = Factory()
person = factory.getPerson("Chetan", "M")

3.适配器模式:

# 客户希望调用的类(但它的request客户不想用)
class Target(object):
    def request(self):
        print("普通请求")

# 客户希望的一个接口
class Adaptee(object):  

    def specific_request(self):
        print("特殊请求")

# 利用继承和重载使得构造出客户希望的类和希望接口的组合
class Adapter(Target):

    def __init__(self):
        self.adaptee = Adaptee()

    def request(self):
        self.adaptee.specific_request()


target = Adapter()
target.request()
原文地址:https://www.cnblogs.com/s1mplelectronic/p/14551648.html