2 回答
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
TA贡献1794条经验 获得超8个赞
您的客户端代码或引导代码需要以某种方式表达所需的实现类型。您可以通过以下方式实现它:
public Interface IReqeust
{
// Some code
}
public class HttpRequest : IRequest
{
// Implementation
}
public class TcpRequest : IRequest
{
// Implementation
}
一种方法可能是提供多种方法。您仍然可以隐藏配置,但一些实现细节会泄漏到您的客户端代码中。
public Interface IRequestFactory
{
IRequest CreateHttpRequest();
IRequest CreateTcpRequest();
}
public class RequestFactory : IRequestFactory
{
// Implementation
}
另一种解决方案是确定在建造工厂时需要什么。
public Interface IRequestFactory
{
IRequest CreateRequest();
}
public class RequestFactory : IRequestFactory
{
private IConfigReader configReader;
public RequestFactory(IConfigReader configReader)
{
this.configReader = configReader;
}
public IRequest CreateRequest()
{
var currentProtocoll = configReader.GetCurrentProtocoll();
if(currentProtocoll is HTTP)
return new HttpRequest();
else
return new TcpRequest();
}
}
我不会推荐更多工厂的解决方案。至少不是你到目前为止所写的。
- 2 回答
- 0 关注
- 259 浏览
添加回答
举报