目录

  • 面向对象之设计模式
    • 一、设计模式概述
    • 二、学习意义
    • 三、设计模式分类
    • 四、创建型模式之单例模式
      • 1、单例模式的内容
      • 2、使用单例模式的目的
      • 3、单例模式实现方式
        • 方式一:
        • 方式二:
        • 方式三:

面向对象之设计模式一、设计模式概述

​设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、稳健性以及安全性的解决方案。

​1995年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称”GoF设计模式”。

二、学习意义

​设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解
正确使用设计模式具有以下优点:
​1.可以提高程序员的思维能力、编程能力和设计能力
​2..使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
​3.使设计的代码可重用性高、可读性强、可靠性高、灵活型好、可维护性强。

三、设计模式分类

​设计模式一共有23种

  • 创建型模式(5种):
    • 工厂模式、抽象工厂模式、创建者模式、原型模式、单例模式
  • 结构型模式(7种):
    • 适配器模式、桥模式、组合模式、装饰模式、外观模式、亨元模式、代理模式
  • 行为型模式(11种):
    • 解释器模式、责任链模式、命令模式、迭代器模式、中介责模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式

四、创建型模式之单例模式1、单例模式的内容

​保证一个类只有一个实例,并提供一个访问它的全局访问点。

2、使用单例模式的目的

  • 当类中有很多非常强大的方法 我们在程序中很多地方都需要使用
  • 如果不做单例 会产生很多无用的对象浪费存储空间
  • 我们想着使用单例模式 整个程序就用一个对象

3、单例模式实现方式方式一:

class A:    # 1、在类中定义全局变量,用来绑定已生成的对象    __instance = None    def __init__(self, name, age, gender):        self.name = name        self.age = age        self.gender = gender # 2、绑定给类的方法    @classmethod    def singleton(cls):        # 3、当使用类调用该方法时,进行判断        if not slc.__instance:            # 4、当类未生成对象时,生成一个对象            cls.__instance = cls('kangkang', 18, 'male')、        # 5、当类已生成对象时,将绑定对象的变量返回给调用者        return cls.__instanceres = A.singleton()res1 = A.singleton()print(id(res), id(res1))

方式二:

'''基于模块的单例模式:提前产生一个对象 之后导模块使用'''class B:    def __init__(self, name, age, gender):        self.name = name        self.age = age        self.gender = gender                        obj = B('kangkang', 18, 'male')

方式三:

def outer(cls):    __instance = cls('kangkang', 18, 'male')    def inner(*args, **kwargs):        if args or kwargs:            obj = cls(*args, **kwargs)            return obj        return __instance    return inner@outerclass C:    def __init__(self, name, age, gender):        self.name = name        self.age = age        self.gender = genderres = C()res1 = C()print(id(res), id(res1))