Pra*_*har 6 language-agnostic design-patterns adapter
任何人都可以通过很好的例子向我解释可插拔适配器的概念吗?
Ate*_*ral 14
根据我对谷歌搜索结果的快速了解,可插拔适配器是一种不针对特定适配器进行硬编码的适配器.表面上(适配器自己的接口),它们都是相同的,但它可以适应不同的接口不同的适配器.我发现这个线程很有说服力:
基本上,它允许您在编译时通过使用反射不知道适配器(接收器)协议时放入适配器.创建适配器实例时,将传递适配器调用方法的名称,以及转换输入类型所需的任何元数据.当适配器接收到目标接口的方法调用时,它使用反射来调用在适配器上指定的相应方法.
与此:
Viewer的主要职责是从域模型填充窗口小部件,而不对域本身做任何假设.JFace查看器使用Pluggable Adapter Pattern中的Delegating Objects机制来实现上述要求.
把它想象成来自外星人的面孔; 当它拥抱一张脸时,你所看到的只是脸部的黏糊糊的背部.你可以用棍子戳它并试图撬开它的手臂(适配器接口).但它基本上可以拥抱任何人(适应者)的脸,无论面部特征如何.也许我正在推动它,但是,嘿,我喜欢Alien.
您可以阅读这篇关于适配器/可插拔模式的文章:
本文内容表:
* 1 Design Patterns
* 2 Intent of Adapter
* 3 Motivation
* 4 Structure
* 5 Applicability
* 6 Consequences
* 7 Implementation
o 7.1 Known Uses and Sample Code
o 7.2 Related Patterns
* 8 Conclusions
* 9 Appendix
o 9.1 References
o 9.2 Glossary
Run Code Online (Sandbox Code Playgroud)
引用:
Smalltalk引入了“可插拔适配器”的概念来描述具有内置接口适配的类。这个有趣的概念允许将类引入到可能期望该类有不同接口的现有系统中。这种技术可以帮助促进跨模块甚至项目的类重用。
这是一个小例子:
我们有两个类 - Foo 和 Boo,它们将一些字符串输出到控制台。适配器类可以调整这两个类的方法来提供客户端所需的接口(SaySomething)。请注意,不依赖于接口名称 - 我们可以轻松调整 SayHey 和 Bark 方法。
class Foo
{
public static void SayHey() { Console.WriteLine("Hey!"); }
}
class Boo
{
public static void Bark() { Console.WriteLine("Woof!"); }
}
class Adapter
{
public Action SaySomething { get; private set;} // "pluggable" adapter
public Adapter(Action saySomethingAction)
{
SaySomething = saySomethingAction;
}
}
class Program
{
static void Main(string[] args)
{
(new Adapter(Foo.SayHey)).SaySomething();
(new Adapter(Boo.Bark)).SaySomething();
}
}
Run Code Online (Sandbox Code Playgroud)