Factory Method -对象创建模型

本文深入探讨了工厂方法设计模式的概念,通过定义一个用于对象创建的接口,让子类决定实例化哪个类,实现类的实例化延迟。文章通过具体代码示例展示了Creator、Product等参与对象的结构和实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1.意图
            定义一个用于对象创建的接口,让子类决定实例化哪个类,Factory Method
            使一个类的实例化延迟到其子类。
    2.参与对象
            Product,ConcreteProduct,Creator,ConcreteCreator
    3.结构

      

代码:

public interface Creator {
   public Product getProduct(); 
}

public interface Product {
   void play();
}

public class ConcreteCreatorA implements Creator {
	private final static ConcreteCreatorA concreteCreatorA = new ConcreteCreatorA();
    private ConcreteCreatorA(){
    	
    }
	public static Creator getConcreteCreatorA(){
    	return concreteCreatorA;
    }
	@Override
	public Product getProduct() {
		return new ConcreteProductA();
	}

}

public class ConcreteCreatorB implements Creator {
	private final static ConcreteCreatorB concreteCreatorB = new ConcreteCreatorB();
    private ConcreteCreatorB(){
    	
    }
	public static Creator getConcreteCreatorB(){
    	return concreteCreatorB;
    }
	@Override
	public Product getProduct() {
		return new ConcreteProductB();
	}

}

public class ConcreteProductA implements Product {

	@Override
	public void play() {
		System.out.println("A.play");
	}

}

public class ConcreteProductB implements Product {

	@Override
	public void play() {
		System.out.println("B.play");
		
	}

}

public class Client {
	public static void main(String[] args) {
         Creator creator = ConcreteCreatorB.getConcreteCreatorB();
         Product  product  =creator.getProduct();
         product.play();
	}
}

 

 

### Llama-factory IT项目工厂模式实现 在处理大规模机器学习模型的微调过程中,`Llama-factory` 提供了一种模块化的方法来简化这一过程。对于 `Mistral-instruct` 的微调工作流而言,采用的是基于工厂设计模式的思想[^1]。 #### 工厂方法模式概述 工厂方法模式是一种创建型设计模式,它提供了接口用于创建对象,在子类中决定实例化哪一个具体的类。这种方式使得程序能够在不指定具体类的情况下创建对象。这种灵活性特别适合于像 `Llama-factory` 这样的框架,其中可能有多种不同的配置选项和参数设置需求。 #### 实现细节 为了适应不同类型的预训练模型以及特定的任务需求,`Llama-factory` 使用 Python 中的面向对象编程特性实现了工厂模式: ```python from abc import ABC, abstractmethod class ModelFactory(ABC): @abstractmethod def create_model(self): pass class MistralInstructModelFactory(ModelFactory): def create_model(self): from transformers import AutoModelForCausalLM model_name_or_path = "mistralai/Mistral-Instruct" return AutoModelForCausalLM.from_pretrained(model_name_or_path) def get_factory(factory_type: str) -> ModelFactory: factories = { 'mistral_instruct': MistralInstructModelFactory, # 可以在这里添加其他模型工厂... } FactoryClass = factories.get(factory_type.lower()) if not FactoryClass: raise ValueError(f"No such factory type {factory_type}") return FactoryClass() ``` 上述代码展示了如何定义抽象基类 `ModelFactory` 和具体的 `MistralInstructModelFactory` 类,后者负责创建并返回经过适当初始化后的 `Mistral-Instruct` 模型实例。函数 `get_factory()` 则充当了一个简单的工厂选择器,允许客户端代码根据名称获取相应的工厂对象。 通过这样的架构设计,不仅提高了系统的可扩展性和维护性,还便于开发者快速上手复杂的大规模语言模型调整流程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值