从一个ConnectionPool的实现看design pattern的运用 (续六).docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它体现了面向对象设计中的最佳实践。在这个关于`ConnectionPool`实现的讨论中,我们可以看到多种设计模式的应用,包括工厂模式、装饰模式、适配器模式和组合模式。 `ResourceMan`是一个抽象的pooling逻辑实现,它关注于资源的管理和复用,而不关心具体的资源类型。这是策略模式的一种体现,使得`ResourceMan`可以独立于资源的实现,提高代码的可扩展性。`ResourceFactory`则用于封装资源的创建逻辑,它作为一个工厂,负责生成资源实例,与`ResourceMan`结合使用,实现了资源的生成和管理。 `ResourcesCollector`和`ResourceCollector`是资源回收的抽象,它们分别处理资源集合的回收和单个资源的回收。这里使用了组合模式,`ResourcesCollector`可以包含多个`ResourceCollector`,根据不同的需求选择不同的实现,例如`LinearResourcesCollector`和`NopResourcesCollector`。这允许系统灵活地适应不同的资源回收策略。 `PooledConnection`是对`Connection`对象的包装,它添加了与pool协调工作的功能,实现了装饰模式。通过`PooledConnection`,原本对用户不透明且不可容错的`ResourceMan<Connection>`被转化为用户友好的`ConnectionPool`,这展示了桥接模式的应用,它解耦了`ResourceMan`和`Connection`的具体实现。 `ResourceMan2ConnectionPool`作为转换器,将`ResourceMan`转换为`ConnectionPool`,它使用了适配器模式,使得不同类型的`ResourceMan`可以适应`ConnectionPool`的接口。在这个过程中,`PooledConnection`起到了关键作用,它负责在`ResourceMan`和`ConnectionPool`之间建立联系。 在实现`ConnectionPool`时,我们首先选择一个适合的`ResourceMan`实现,然后根据资源特性决定使用哪种`ResourcesCollector`。例如,对于`ConnectionPool`,可能会选择`LinearResourcesCollector<Connection>`,而对于线程池,可能会选择`NopResourcesCollector`。接着,为了处理单个资源的释放,`ConnectionCollector`被传递给`ResourcesCollector`。然后,创建`ResourceMan`的实例,并通过`ResourceMan2ConnectionPool`将其转换为`ConnectionPool`。 在这个设计中,尽管用户可以选择`ResourceMan`和`ResourceCollector<Connection>`,但`ConnectionPool`内部对`ResourcesCollector`和`ResourceCollector`的实现是固定的,这体现了依赖倒置原则,即高层次的模块不应该依赖低层次的模块,他们都应该依赖于抽象。 这个`ConnectionPool`的实现充分利用了设计模式的灵活性和可扩展性,使得系统能够根据不同的需求进行定制,同时保持了良好的结构和解耦。这样的设计思路对于大型复杂系统的构建至关重要,因为它提高了代码的可维护性和可复用性。
- 粉丝: 0
- 资源: 5万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助