设计模式 - Adapter模式
2016-05-20 20:41
281 查看
1 原理
2 代码
3 总结
用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 来获得真正的接口继承了。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用