有没有人在现实世界的应用程序中使用Bridge Pattern?如果是这样,你是如何使用它的?是我,还是仅仅是适配器模式,在混合中引入了一点依赖注入?它真的值得拥有自己的模式吗?
你能解释一下Proxy和Decorator之间的区别吗?
我看到的主要区别在于,当我们假设Proxy使用合成而Decorator使用聚合时,似乎很清楚通过使用多个(一个或多个)装饰器,您可以修改/添加功能到预先存在的实例(装饰),而代理有自己的代理类的内部实例,并委托给它添加一些额外的功能(代理行为).
是个问题-是否代理与聚集创造仍然是代理还是相当装饰?是否允许(通过GoF模式中的定义)创建具有聚合的代理?
我正在研究我的设计模式,我在编码中尚未认真使用的一种模式是装饰模式.
我理解这种模式,但我想知道的是现实世界中一些具体的例子,装饰者模式是最佳/最佳/优雅的解决方案.需要装饰器模式的特定情况非常方便.
谢谢.
代理,包装器或façade类之间有什么区别
它们对我来说似乎都是一样的,它们采用实现,封装它然后在调用封装对象的方法的包装器/代理/外观类上调用方法.
请说明为什么它们与示例不同.
谢谢
我一直在阅读有关设计模式的内容,这让我很好奇:
Decorator Pattern表示包装原始对象并在包装器对象中添加其他功能.从结构上讲 - Wrappers遵循装饰模式.
适配器模式表示通过创建一个对象并向其添加功能来更改一个对象.这些功能与原始对象的功能不匹配,因此我们必须修改它们,但我们也可以添加我们自己的额外方法,这些方法不是原始对象的一部分.
在这方面,Adapter和Decorator设计模式有什么区别?
据我所知,适配器和代理模式使两个不同/不同的类/对象与每个相互兼容以进行通信.它们都是结构模式.我发现他们两个都非常相似.
有人可以解释究竟是什么让他们与众不同?
编辑:我经历了这个问题.但我更愿意在Adapter和Proxy之间进行密切的比较.
oop design-patterns adapter object-oriented-analysis proxy-pattern
我觉得我一直在使用这些模式系列很多次,但是,对我来说很难看出差异,因为它们的定义非常相似.基本上似乎所有这些都是关于包装另一个或多个对象来扩展或用额外的东西包装他们的行为.
对于快速示例,在存储库模式上实现缓存机制似乎就是这种情况.这是一个C#我可能会开始的快速示例代码.
public interface IRepository {
IEnumerable<T> GetItems<T>();
}
public class EntityFrameworkRepository : IRepository {
...
}
public class CachedRepository : IRepository {
private IRepository _repository;
private ICacheProvider _cache;
public CachedRepository(IRepository repository, ICacheProvider cache) {
this._repository = repository;
this._cache = cache;
}
public IEnumerable<T> GetItems<T>() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
例如,这些模式中的哪一种适用于这种情况?任何人都可以简要地澄清理论和实践上的差异吗?
维基百科引用的DI的定义指出:
A.高级模块不应该依赖于低级模块.两者都应该取决于抽象.B.抽象不应该依赖于细节.细节应取决于抽象.
我正在尝试将该原则应用于我的代码:
class Printer{
private $logger;
function __construct(Zend_Log $logger){
$this->logger=$logger;
}
function print(){
//Some code
$this->logger->log('Logger in action ;)');
}
}
Run Code Online (Sandbox Code Playgroud)
既然为什么Printer类依赖于Zend_Log哪个既不是抽象类也不是接口,那么我就违反了依赖性倒置原则.
如何知道Zend_Log不扩展抽象类也不实现接口?