您的位置:首页 > 其它

设计模式 - Adapter模式

2016-05-20 20:41 281 查看
1 原理

用C++很好实现,因为C++可以多个继承。
但是C#、Java等语言不能多继承类,只能多继承接口。
使用这些语言实现Adapter模式,只能将想要适配的两个类或者更多类抽象出接口,
然后将适配器继承这些接口,使用方法或者构造方法,
将想要适配的类的实例传入适配器,然后通过适配器调用各个的方法。


2 代码

using UnityEngine;
using System.Collections;

namespace Adapter{
public interface IClassA{
void sayA();
}

public interface IClassB{
void sayB();
}

public class ClassA : IClassA{
public void sayA(){
Debug.Log("ClassA");
}
}

public class ClassB : IClassB{
public void sayB(){
Debug.Log("ClassB");
}
}

public class Adapter : IClassA , IClassB{

public ClassA a;
public ClassB b;

public Adapter(ClassA a){
this.a = a;
}
public Adapter(ClassB b){
this.b = b;
}

public virtual void sayA(){
if(null != a){
a.sayA();
}
}
public virtual void sayB(){
if(null != b){
b.sayB();
}
}
}

public class AdapterDemo : MonoBehaviour {

void Start(){
Adapter a = new Adapter(new ClassA());
a.sayA();
Adapter b = new Adapter(new ClassB());
b.sayB();
}
}
}


3 总结



在 Adapter 模式的两种模式中,有一个很重要的概念就是接口继承和实现继承的区别和 联系。接口继承和实现继承是面向对象领域的两个重要的概念,接口继承指的是通过继承, 子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接 口)。在 C++中的 public 继承既是接口继承又是实现继承,因为子类在继承了父类后既可以 对外提供父类中的接口操作,又可以获得父类的接口实现。当然我们可以通过一定的方式和 技术模拟单独的接口继承和实现继承,例如我们可以通过 private 继承获得实现继承的效果 (private 继承后,父类中的接口都变为 private,当然只能是实现继承了。),通过纯抽象基 类模拟接口继承的效果,但是在 C++中 pure virtual function 也可以提供默认实现,因此这是 不纯正的接口继承,但是在 Java 中我们可以 interface 来获得真正的接口继承了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式