差异适配器和装饰器
Difference adapter and decorator
我正在学习设计模式,现在我正在尝试了解适配器和装饰器之间的区别。考虑列表中的以下装饰器:
Collections.synchronizedList(List<T> lst)
在指定的 List
上创建同步装饰器。反过来,适配器模式也将它封装起来,如 here 所述。示例:
public interface Chief {
public Object makeBreakfast();
public Object makeDinner();
public Object makeSupper();
}
public class Plumber {
public Object getPipe(){
return new Object();
}
public Object getKey(){
return new Object();
}
public Object getScrewDriver(){
return new Object();
}
}
public class ChiefAdapter implements Chief{
private Plumber plumber = new Plumber();
@Override
public Object makeBreakfast() {
return plumber.getKey();
}
@Override
public Object makeDinner() {
return plumber.getScrewDriver();
}
@Override
public Object makeSupper() {
return plumber.getPipe();
}
}
没有人解释一下区别吗?
装饰器模式主要是为了 taking/introducing 对 class 附加责任。例如,您可以使用一个包含对象序列的 class 容器并实现一个迭代器来赋予额外的职责,能够在 class 中迭代该集合。
高夫
attach additional responsibilities to an object dynamically.
Decorators provide a flexible alternative to subclassing for extending
functionality.
另一方面,Adapter 将 class 转换为另一个职责,如您展示的示例所示,adapter 将水管工转换为厨师。
高夫
convert the interface of a class into another interface clients
expect. Adapater lets classes work together that couldn't otherwise
because of incompatible interfaces.
装饰器 'decorates' 具有附加功能的现有接口,但新实例的接口和类型保持不变 - 请注意 synchronizedList 如何采用 List 和 returns List。 Adapter 'adapts' 一个特定的接口,显示为一个完全不同的、不相关的接口——在你的例子中,它把一个管道工变成了一个完全不同的类型的主管。
Decorator : 你想给一个class添加功能但是你不想使用继承(使用base的实例class),见(开闭原则)
适配器:您有一个要使用的 class,但这些方法与您程序中使用的方法不同,您创建了一个 class,其中包含此 [=14] 的一个实例=] 并且您的程序确实必须直接与此 class 对话,请参阅(liskov 替换原则)。
我正在学习设计模式,现在我正在尝试了解适配器和装饰器之间的区别。考虑列表中的以下装饰器:
Collections.synchronizedList(List<T> lst)
在指定的 List
上创建同步装饰器。反过来,适配器模式也将它封装起来,如 here 所述。示例:
public interface Chief {
public Object makeBreakfast();
public Object makeDinner();
public Object makeSupper();
}
public class Plumber {
public Object getPipe(){
return new Object();
}
public Object getKey(){
return new Object();
}
public Object getScrewDriver(){
return new Object();
}
}
public class ChiefAdapter implements Chief{
private Plumber plumber = new Plumber();
@Override
public Object makeBreakfast() {
return plumber.getKey();
}
@Override
public Object makeDinner() {
return plumber.getScrewDriver();
}
@Override
public Object makeSupper() {
return plumber.getPipe();
}
}
没有人解释一下区别吗?
装饰器模式主要是为了 taking/introducing 对 class 附加责任。例如,您可以使用一个包含对象序列的 class 容器并实现一个迭代器来赋予额外的职责,能够在 class 中迭代该集合。
高夫
attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
另一方面,Adapter 将 class 转换为另一个职责,如您展示的示例所示,adapter 将水管工转换为厨师。
高夫
convert the interface of a class into another interface clients expect. Adapater lets classes work together that couldn't otherwise because of incompatible interfaces.
装饰器 'decorates' 具有附加功能的现有接口,但新实例的接口和类型保持不变 - 请注意 synchronizedList 如何采用 List 和 returns List。 Adapter 'adapts' 一个特定的接口,显示为一个完全不同的、不相关的接口——在你的例子中,它把一个管道工变成了一个完全不同的类型的主管。
Decorator : 你想给一个class添加功能但是你不想使用继承(使用base的实例class),见(开闭原则)
适配器:您有一个要使用的 class,但这些方法与您程序中使用的方法不同,您创建了一个 class,其中包含此 [=14] 的一个实例=] 并且您的程序确实必须直接与此 class 对话,请参阅(liskov 替换原则)。