我正在为来自两个不同的股票市场服务器(REST)的GET
数据编写一个库,并清理数据。 API服务器具有不同的端点,它们不会以相似的格式返回数据,这意味着必须对其进行数据清理。
抽象工厂方法:
class StockMarketFactory(ABC):
@abstractmethod
def create_stock_market_requestor(self) -> AbstractMarketRequestor:
pass
@abstractmethod
def create_data_cleaner(self) -> AbstractDataCleaner:
pass
class ConcreteMarketRequestorFactory(StockMarketFactory):
def create_stock_market_requestor(self) -> ConcreteMarketRequestorA:
return ConcreteMarketRequestorA()
def create_data_cleaner(self) -> ConcreteMarketCleanerA:
return ConcreteMarketCleanerA()
class ConcreteFactory2(StockMarketFactory):
def create_stock_market_requestor(self) -> ConcreteMarketRequestorB:
return ConcreteMarketRequestorB()
def create_data_cleaner(self) -> ConcreteMarketCleanerB:
return ConcreteMarketCleanerB()
class AbstractMarketRequestor(ABC):
@abstractmethod
def get_historical_data(self) -> str:
pass
class ConcreteMarketRequestorA(AbstractMarketRequestor):
def get_historical_data(self) -> str:
return "The result of the Market A1."
class ConcreteMarketRequestorB(AbstractMarketRequestor):
def get_historical_data(self) -> str:
return "The result of the Market A2."
class AbstractDataCleaner(ABC):
@abstractmethod
def clean_and_manipulate_data(self, *args, **kwargs) -> None:
pass
class ConcreteMarketCleanerA(AbstractDataCleaner):
def clean_and_manipulate_data(self, historical_data):
print(f"Historical data is being cleaned on A")
class ConcreteMarketCleanerB(AbstractDataCleaner):
def clean_and_manipulate_data(self, historical_data):
print(f"Historical data is being cleaned on B")
def client_code(factory: StockMarketFactory) -> None:
market_a = factory.create_stock_market_requestor()
historical_data = market_a.get_historical_data()
cleaner_a = factory.create_data_cleaner()
cleaner_a.clean_and_manipulate_data(historical_data)
也可以使用2种不同的“工厂方法”来实现:
从设计角度看,抽象工厂方法似乎很优雅。但是,工厂方法将使其更易于理解。这些是我最好的选择,还是我可以使用其他设计模式?