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) }