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


    | 软件代码开发技术 | 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()
    
  • 相关阅读:
    Java 递归算法,遍历文件夹下的所有文件。
    基于appium的移动端自动化测试,密码键盘无法识别问题
    第一个脚印
    最简单ajax,$.post()用法
    关于图片title与alt
    iframe loading 效果
    iframe 跨域的高度自适应
    练习卷动式新闻广告牌
    JS学习笔记《数值与字符串相加篇》
    解决FLASH的层级问题
  • 原文地址:https://www.cnblogs.com/s1mplelectronic/p/14551648.html
Copyright © 2020-2023  润新知