Skip to content

Latest commit

 

History

History
117 lines (59 loc) · 4.92 KB

分析报告.md

File metadata and controls

117 lines (59 loc) · 4.92 KB

设计模式分析报告

1.Pytorch分析报告

1. 工厂模式(Factory Pattern)

定义

工厂模式通过定义一个工厂方法来创建对象,而不是直接在代码中使用构造函数。这样可以将对象的创建过程封装在一个工厂类中,根据不同的条件动态决定创建不同类型的对象。

在PyTorch中的应用

在PyTorch中,Test类根据toChannelsLast的布尔值选择构建不同的类。这种方式封装了对象创建的细节,使得类的实例化更具灵活性和可扩展性。

类图

PyTorch-工厂模式

2. 装饰器模式(Decorator Pattern)

定义

装饰器模式允许动态地为对象添加额外的功能,而无需改变对象的原始代码。通过将对象包装在装饰器类中,装饰器可以增强或修改对象的行为。

在PyTorch中的应用

SpectralNorm类通过多个T_ModelSpectralNorm实例来组成,形成了装饰器模式。每个T_ModelSpectralNorm类为SpectralNorm提供附加的功能,而不修改原始类的实现。

类图

PyTorch-装饰器模式

3. 模板方法模式(Template Method Pattern)

定义

模板方法模式定义了一个算法的框架,允许子类重定义算法中的某些步骤。模板方法模式通过在父类中定义算法骨架,并将某些步骤的实现推迟到子类中,以实现灵活性。

在PyTorch中的应用

_ConvNd类的部分方法通过_ConTransposeNd类实现。_ConTransposeNd类作为_ConvNd的子类,实现了特定的操作步骤,从而继承了父类的模板框架并重写了具体实现。

类图

PyTorch-模版方法模式

4. 状态模式(State Pattern)

定义

状态模式允许一个对象根据其内部状态的变化来改变其行为。每个状态都有独立的行为,状态的转换由状态对象控制,避免了复杂的条件语句。

在PyTorch中的应用

Optimizer类具有多个状态,每个状态控制优化器的行为。状态模式使得优化器能够在不同状态下执行不同的操作,从而提高了代码的可扩展性和灵活性。

类图

PyTorch-状态模式

2.LangChain分析报告

1. 工厂模式(Factory Pattern)

定义

工厂模式通过定义一个工厂方法来创建对象,而不是直接使用构造函数。工厂方法通常在父类中定义,子类实现具体的对象创建。工厂模式让对象的创建过程集中管理,并根据不同的需求选择性地生成不同的类实例。

在LangChain中的应用

在LangChain中,BaseModel是抽象产品类,AuthorDiscussionNode等是具体产品类。BaseTool的子类负责生产这些具体产品。通过这种方式,LangChain能够灵活地扩展不同类型的工具和模型。

类图

LangChain-工厂模式

2. 策略模式(Strategy Pattern)

定义

策略模式是一种行为型设计模式,允许在运行时选择算法或行为。通过将算法或行为封装为独立的策略类,策略模式可以使得算法的使用者独立于具体的算法实现,从而实现动态切换。

在LangChain中的应用

ChatOpenAI类包含validate_environment方法,且其两个子类分别重写了该方法。通过策略模式,ChatCompletion可以在调用validate_environment方法时,根据具体的子类实现进行策略切换。

类图

LangChain-策略模式

3. 观察者模式(Observer Pattern)

定义

观察者模式是一种行为型设计模式,定义了一种一对多的依赖关系,当被观察对象的状态发生变化时,所有依赖于它的观察者都会自动收到通知并更新。观察者模式常用于事件驱动的系统中。

在LangChain中的应用

Embeddings是观察者类,VectorStore是被观察对象。当add_texts()add_documents()方法被调用时,VectorStore会通过Embeddings类表现出相应的更新,符合观察者模式的设计原则。

类图

LangChain-观察者模式

4. 装饰器模式(Decorator Pattern)

定义

装饰器模式是一种结构型设计模式,允许在不修改原始对象的情况下,为对象动态添加额外的功能。通过将原始对象包装在装饰器类中,装饰器可以增强或修改对象的行为。

在LangChain中的应用

BaseOpenAI类是一个抽象基类,定义了生成内容的接口,OpenAI类实现了这个接口。BaseOpenAI中的属性clientasync_clientPrivateAttr修饰,实现了装饰器模式,以便在不改变原始类结构的情况下,动态增强其功能。

类图

LangChain-装饰器模式