108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package factory
 | ||
| 
 | ||
| import (
 | ||
| 	"fmt"
 | ||
| 	"go-admin/common/global"
 | ||
| 	"go-admin/common/interfaces"
 | ||
| 	"strings"
 | ||
| )
 | ||
| 
 | ||
| // ExchangeFactory 交易所工厂
 | ||
| type ExchangeFactory struct {
 | ||
| 	clients map[string]interfaces.ExchangeInterface
 | ||
| }
 | ||
| 
 | ||
| // NewExchangeFactory 创建交易所工厂实例
 | ||
| func NewExchangeFactory() *ExchangeFactory {
 | ||
| 	return &ExchangeFactory{
 | ||
| 		clients: make(map[string]interfaces.ExchangeInterface),
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // GetExchange 获取指定交易所的客户端
 | ||
| func (f *ExchangeFactory) GetExchange(exchangeType string) (interfaces.ExchangeInterface, error) {
 | ||
| 	exchangeType = strings.ToLower(strings.TrimSpace(exchangeType))
 | ||
| 
 | ||
| 	// 检查是否已经创建了该交易所的客户端
 | ||
| 	if client, exists := f.clients[exchangeType]; exists {
 | ||
| 		return client, nil
 | ||
| 	}
 | ||
| 
 | ||
| 	// 根据交易所类型创建对应的客户端
 | ||
| 	var client interfaces.ExchangeInterface
 | ||
| 	var err error
 | ||
| 
 | ||
| 	switch exchangeType {
 | ||
| 	case global.EXCHANGE_BINANCE:
 | ||
| 		client, err = f.createBinanceClient()
 | ||
| 	case global.EXCHANGE_BITGET:
 | ||
| 		client, err = f.createBitgetClient()
 | ||
| 	case global.EXCHANGE_OKEX:
 | ||
| 		return nil, fmt.Errorf("OKEx integration not implemented yet")
 | ||
| 	case global.EXCHANGE_GATE:
 | ||
| 		return nil, fmt.Errorf("Gate.io integration not implemented yet")
 | ||
| 	case global.EXCHANGE_COINBASE:
 | ||
| 		return nil, fmt.Errorf("Coinbase integration not implemented yet")
 | ||
| 	case global.EXCHANGE_BITFINEX:
 | ||
| 		return nil, fmt.Errorf("Bitfinex integration not implemented yet")
 | ||
| 	case global.EXCHANGE_BITMEX:
 | ||
| 		return nil, fmt.Errorf("BitMEX integration not implemented yet")
 | ||
| 	default:
 | ||
| 		return nil, fmt.Errorf("unsupported exchange type: %s", exchangeType)
 | ||
| 	}
 | ||
| 
 | ||
| 	if err != nil {
 | ||
| 		return nil, fmt.Errorf("failed to create %s client: %v", exchangeType, err)
 | ||
| 	}
 | ||
| 
 | ||
| 	// 缓存客户端实例
 | ||
| 	f.clients[exchangeType] = client
 | ||
| 
 | ||
| 	return client, nil
 | ||
| }
 | ||
| 
 | ||
| // createBinanceClient 创建Binance客户端包装器
 | ||
| func (f *ExchangeFactory) createBinanceClient() (interfaces.ExchangeInterface, error) {
 | ||
| 	// Binance适配器尚未完全实现,暴时返回错误
 | ||
| 	return nil, fmt.Errorf("Binance adapter not fully implemented yet")
 | ||
| }
 | ||
| 
 | ||
| // createBitgetClient 创建Bitget客户端
 | ||
| func (f *ExchangeFactory) createBitgetClient() (interfaces.ExchangeInterface, error) {
 | ||
| 	// 使用默认空参数创建Bitget客户端(公开接口不需要认证)
 | ||
| 
 | ||
| 	return nil, fmt.Errorf("Bitget adapter not fully implemented yet")
 | ||
| }
 | ||
| 
 | ||
| // GetSupportedExchanges 获取支持的交易所列表
 | ||
| func (f *ExchangeFactory) GetSupportedExchanges() []string {
 | ||
| 	return []string{
 | ||
| 		// global.EXCHANGE_BINANCE, // Binance适配器尚未完全实现
 | ||
| 		global.EXCHANGE_BITGET,
 | ||
| 		// 其他交易所可以在未来添加
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // RegisterExchange 注册自定义交易所客户端
 | ||
| func (f *ExchangeFactory) RegisterExchange(exchangeType string, client interfaces.ExchangeInterface) {
 | ||
| 	f.clients[strings.ToLower(exchangeType)] = client
 | ||
| }
 | ||
| 
 | ||
| // ClearCache 清理缓存的客户端
 | ||
| func (f *ExchangeFactory) ClearCache() {
 | ||
| 	for _, client := range f.clients {
 | ||
| 		if closer, ok := client.(interface{ Close() error }); ok {
 | ||
| 			closer.Close()
 | ||
| 		}
 | ||
| 	}
 | ||
| 	f.clients = make(map[string]interfaces.ExchangeInterface)
 | ||
| }
 | ||
| 
 | ||
| // 全局工厂实例
 | ||
| var DefaultExchangeFactory = NewExchangeFactory()
 | ||
| 
 | ||
| // GetExchangeClient 获取交易所客户端的便捷函数
 | ||
| func GetExchangeClient(exchangeType string) (interfaces.ExchangeInterface, error) {
 | ||
| 	return DefaultExchangeFactory.GetExchange(exchangeType)
 | ||
| }
 |