本文介绍: 提供一个创建系列相关或相互依赖对象接口,而无需指定它们的具体类。

面向对象编程
类和对象
面向对象编程和面向过程编程区别

设计模式
软件设计模式按类型分
工厂模式

面向对象编程

面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,其中程序组织对象集合每个对象都是类的实例面向对象编程核心思想是将系统中的实体抽象为对象,这些对象具有属性行为,并且能够相互交互

基本概念

  1. 类(Class): 类是对象的模板或蓝图,定义了一类对象所共有的属性方法。类是抽象的,不占用内存空间,但可以用来创建具体的对象。

  2. 对象(Object): 对象是类的实例,是具体的实体。对象包含了类定义属性方法,并占用内存空间

  3. 属性(Attribute): 类中数据成员用于描述对象的特征

  4. 方法(Method): 类中的函数成员用于描述对象的行为

  5. 封装(Encapsulation): 封装是将类的实现细节隐藏起来,只暴露必要的接口通过使用访问修饰符,如publicprivate等,来控制对类的成员访问

  6. 继承(Inheritance): 继承是一种机制,允许一个类继承另一个类的属性方法子类可以重用父类代码,同时可以子类添加修改功能

  7. 多态(Polymorphism): 多态是指对象可以以多种形态存在。同一方法调用可以在不同的对象上产生不同行为,包括方法重载和方法重写

优点:

  1. 可重用性(Reusability): 可以通过继承机制实现代码的重用,减少重复编写相似功能的代码。

  2. 封装性(Encapsulation):数据行为封装在类中,提高了代码的安全性可维护性

  3. 扩展性(Extensibility): 可以通过继承多态机制扩展已有的代码。

  4. 灵活性(Flexibility): 对象可以在运行动态地改变其状态和行为,提高系统的灵活性和可扩展性

  5. 可维护性(Maintainability): 由于具有良好的封装性,修改一个类不会影响到其他部分,便于维护和升级

实例:

# 定义一个简单的类
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        return "Woof!"

# 创建对象
my_dog = Dog("Buddy", 3)

# 访问对象的属性和调用方法
print(f"My dog's name is {my_dog.name} and it says {my_dog.bark()}.")

在这个例子中,Dog 是一个类,my_dog 是该类的一个对象。对象具有属性nameage)和方法(bark)。通过面向对象编程,可以更自然地模拟现实世界的实体和交互

类和对象

面向对象编程(Object-Oriented Programming,简称OOP)中,类(Class)和对象(Object)是两个基本概念

  1. 类(Class): 类是一种抽象数据类型,是对一类对象的抽象描述。它定义了对象的属性和行为。类是一个模板或蓝图,它描述一组对象共有的特征和行为。例如,如果有一个”汽车“类,那么该类可能包括属性(如颜色品牌型号)和方法(如启动、停止、加速)。

  2. 对象(Object): 对象是类的实例,是具体的实体。可以将类看作是对象的模板,而对象则是类的实例化。使用创建对象时,对象会继承类中定义的属性和方法。例如,如果有一个”汽车“类,那么一辆具体的汽车就是该类的一个对象,具有特定的颜色、品牌型号

下面是一个简单的Python示例演示了类和对象的概念

# 定义一个简单的类
class Car:
    # 类的构造函数
    def __init__(self, color, brand, model):
        self.color = color
        self.brand = brand
        self.model = model

    # 类的方法
    def start_engine(self):
        print("Engine started!")

    def stop_engine(self):
        print("Engine stopped!")

# 创建两个Car类的对象
car1 = Car("Red", "Toyota", "Camry")
car2 = Car("Blue", "Honda", "Accord")

# 访问对象的属性和调用方法
print(car1.color)  # 输出:Red
car2.start_engine()  # 输出:Engine started!

在这个例子中,Car是一个类,car1car2是该类的两个对象。这些对象都有颜色、品牌型号等属性,以及启动和停止引擎等方法。类的定义提供了一种组织封装代码的方式,使得代码更具有可维护性和可扩展性

面向对象编程和面向过程编程区别

面向对象编程(Object-Oriented Programming,OOP)和面向过程编程(Procedural Programming)在一些方面的主要区别

面向对象 和 面向<a href="http://www.7code.cn/show_tag/%e8%bf%87%e7%a8%8b" title="过程" target="_blank" >过程</a> <a href="http://www.7code.cn/show_tag/%e5%8c%ba%e5%88%ab" title="区别" target="_blank" >区别</a>

面向对象 和 面向过程 区别

特征 面向对象编程 面向过程编程
基本单位 对象 函数(或过程
数据与行为 封装在对象中,对象具有属性和方法 数据函数分离,通过函数操作数据
关系 类与对象,继承多态 数据函数组织方式
可维护性 较好,封装性、继承性多态性提高了可维护性 相对较好,但较面向对象略显复杂
复杂 相对较高,但更适合处理大规模、复杂系统 相对较低,适用于小规模、简单问题
灵活性 较高,通过继承多态,可灵活地扩展修改代码 较低,需更改函数添加功能
示例 Java、Python、C++ C、Fortran

设计模式

设计模式简介

设计模式是在软件设计中常用的一些解决方案总结和提炼,它是对一些常见问题解决方法的一种描述设计模式不是一种具体的代码实现,而是一种解决问题的思想和方法的指导,它提供了一套经过验证的、可重用的设计思想,有助于开发人员设计出更加灵活、可维护和可扩展的代码。

下面简要介绍一些常见设计模式

  1. 工厂模式(Factory Pattern): 通过定义一个创建对象接口,由子类决定实例化哪一个类。

  2. 抽象工厂模式(Abstract Factory Pattern): 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

  3. 单例模式(Singleton Pattern): 保证一个类只有一个实例,并提供一个全局访问点。

  4. 建造者模式(Builder Pattern): 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同表示

  5. 原型模式(Prototype Pattern):原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

  6. 适配器模式(Adapter Pattern): 将一个类的接口转换成客户希望的另外一个接口

  7. 桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化。

  8. 过滤器模式(Filter Pattern): 使用不同标准过滤一组对象,通过逻辑运算以解耦标准和对象。

  9. 组合模式(Composite Pattern): 将对象组合成树形结构表示部分整体”的层次结构

  10. 装饰器模式(Decorator Pattern): 动态地给一个对象添加一额外的职责,同时又不改变其结构

  11. 外观模式(Facade Pattern):子系统中的一组接口提供一个一致的界面,以简化子系统使用

  12. 享元模式(Flyweight Pattern): 使用共享对象可有效地支持大量的细粒度的对象。

  13. 代理模式(Proxy Pattern): 为其他对象提供一种代理控制对这个对象的访问

  14. 责任链模式(Chain of Responsibility Pattern):请求创建一个接收者对象的链。

  15. 命令模式(Command Pattern): 将一个请求封装成一个对象,从而使用户可用不同的请求对客户进行参数化。

  16. 解释器模式(Interpreter Pattern): 给定一个语言,定义它的文法的一种表示,并定义一个解释器。

  17. 迭代器模式(Iterator Pattern): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露内部的表示。

  18. 中介者模式(Mediator Pattern): 用一个中介对象来封装一系列的对象交互

  19. 备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态

  20. 观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新

  21. 状态模式(State Pattern): 允许一个对象在其内部状态发生改变时改变它的行为。

  22. 空对象模式(Null Object Pattern): 用一个对象来代表一个不存在的对象或者说是不可用的对象。

  23. 策略模式(Strategy Pattern): 定义一系列算法,将每个算法封装起来,并使它们可以互换。

  24. 模板模式(Template Pattern): 定义一个算法的骨架,而将一些步骤延迟子类中。

  25. 访问者模式(Visitor Pattern): 表示一个作用于某对象结构中的各元素操作

  26. MVC 模式(Model-View-Controller Pattern):系统分为模型视图控制器三个部分,以降低彼此之间的耦合度。

  27. 业务代表模式(Business Delegate Pattern):表示层业务层解耦。

  28. 组合实体模式(Composite Entity Pattern): 用于多个实体组合成一个实体。

  29. 数据访问对象模式(Data Access Object Pattern): 提供了一种数据访问方式,即将数据存储在不同的源中。

  30. 前端控制器模式(Front Controller Pattern): 使用一个单一的控制器处理所有请求。

  31. 拦截过滤器模式(Intercepting Filter Pattern): 用于应用程序的请求或响应做一些预处理/后处理

  32. 服务定位器模式(Service Locator Pattern): 提供了一个注册服务获取服务机制

  33. 传输对象模式(Transfer Object Pattern): 通过序列化/反序列化传输数据。

这些设计模式提供了在特定情境下解决问题的通用方法,并可以根据需要组合使用选择适当的设计模式可以帮助开发人员创建

更灵活、可维护和可扩展的软件

软件设计模式按类型

软件设计模式是在软件设计中经常遇到的一些问题的解决方案的通用模板。这些设计模式并不是可直接翻译成代码的具体算法,而是一种思想和组织结构,能够帮助程序员解决某类常见问题,并使软件更容易理解、可维护和可扩展。设计模式通常分为三种类型:创建型模式、结构型模式和行为型模式。

以下是一些常见软件设计模式:

1. 创建型模式(Creational Patterns):

2. 结构型模式(Structural Patterns):

3. 行为型模式(Behavioral Patterns):

  • 责任链模式(Chain of Responsibility Pattern): 为请求创建一个接收者对象的链。
  • 命令模式(Command Pattern): 将一个请求封装成一个对象,从而使用户可用不同的请求对客户进行参数化。
  • 解释器模式(Interpreter Pattern): 给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  • 迭代器模式(Iterator Pattern): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
  • 中介者模式(Mediator Pattern): 用一个中介对象来封装一系列的对象交互
  • 备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新
  • 状态模式(State Pattern): 允许一个对象在其内部状态发生改变时改变它的行为。
  • 空对象模式(Null Object Pattern): 用一个对象来代表一个不存在的对象或者说是不可用的对象。
  • 策略模式(Strategy Pattern): 定义一系列算法,将每个算法封装起来,并使它们可以互换。
  • 模板模式(Template Pattern): 定义一个算法的骨架,而将一些步骤延迟子类中。
  • 访问者模式(Visitor Pattern): 表示一个作用于某对象结构中的各元素操作

这些设计模式提供了通用的解决方案,但并不是一成不变的规则,应根据具体的问题和场景选择合适的设计模式。同时,过度使用设计模式也可能导致代码变得复杂,因此在应用设计模式时需要权衡。

工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它属于工厂模式的一种,主要用于创建对象。在简单工厂模式中,有一个工厂负责根据客户端需求创建不同的对象。

结构:

特点:

  1. 简单工厂只有一个工厂类,而不像抽象工厂模式那样有多个工厂类。
  2. 客户端通过工厂类来创建产品,而无需直接实例化具体产品
  3. 工厂类负责决定创建哪种产品,客户端只需知道产品的类型即可

示例代码:

# 产品接口
class Product:
    def operation(self):
        pass

# 具体产品A
class ConcreteProductA(Product):
    def operation(self):
        return "ConcreteProductA operation"

# 具体产品B
class ConcreteProductB(Product):
    def operation(self):
        return "ConcreteProductB operation"

# 简单工厂类
class SimpleFactory:
    @staticmethod
    def create_product(product_type):
        if product_type == "A":
            return ConcreteProductA()
        elif product_type == "B":
            return ConcreteProductB()
        else:
            raise ValueError("Invalid product type")

# 客户端代码
def client_code(factory, product_type):
    product = factory.create_product(product_type)
    result = product.operation()
    return result

# 使用
factory = SimpleFactory()
result_A = client_code(factory, "A")
result_B = client_code(factory, "B")

print(result_A)  # 输出:ConcreteProductA operation
print(result_B)  # 输出:ConcreteProductB operation

在这个示例中,SimpleFactory 是工厂类,负责根据客户端的请求创建具体产品对象。Product 是产品接口,定义了产品的操作ConcreteProductAConcreteProductB 是具体产品类,实现了产品接口。客户端通过调用工厂类的 create_product 方法来创建不同类型的产品,而无需关心具体产品类的实现。

虽然简单工厂模式简化了对象的创建过程,但它的缺点是如果要添加新的产品,需要修改工厂类的代码,违反了开闭原则。因此,它适用于产品种类较少且不经常变化的情况。

  • 工厂模式(Factory Pattern)是 最常用的设计模式之一。

原文地址:https://blog.csdn.net/m0_62140641/article/details/134683090

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_28686.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注