但我不明白,有人可以帮我解释一下吗? "编程到接口而不是实现"是处理变革的重要设计原则。如何在适配器模式中实现此主体?
答案 0 :(得分:2)
虽然你的问题不是100%正确,但我还是试着回答它。 “程序到接口不实现”是面向对象世界的根本原则。例如,而不是做
SpecialEmployee emp = new SpecialEmpoyee();
我们应该始终IEmployee emp = new SpecialEmployee();
。
以下是使用相同原理的适配器模式示例 -
interface IBird
{
public void fly();
public void makeSound();
}
class Sparrow : IBird
{
public void fly()
{
// Print "Fly"
}
public void makeSound()
{
// Print "Sound"
}
}
interface ToyDuck
{
// toyducks dont fly they just make
// squeaking sound
public void squeak();
}
class PlasticToyDuck implements ToyDuck
{
public void squeak()
{
//Print "Squeak"
}
}
class BirdAdapter implements ToyDuck
{
// You need to implement the interface your
// client expects to use.
// Instead of using implementation we are programming against interface
// here, by using IBird instead of "new Sparrow" or something like it.
// Further, it is an example of constructor dependency injection where we are inserting dependency "IBird" through constructor.
IBird bird;
public BirdAdapter(IBird bird)
{
// we need reference to the object we
// are adapting
this.bird = bird;
}
public void squeak()
{
// translate the methods appropriately
bird.makeSound();
}
}
答案 1 :(得分:0)
Adapter pattern允许现有类的接口可以从另一个接口使用,这意味着适配器将已存在的东西(Adaptee)适配到您想要的接口(Target)。
Target是一个接口,所以你可以有更多的实现,一个实现是Adapter,但你也可以有目标接口的其他实现,所以"编程到一个接口而不是一个实现"原则得以实现。