Adapter模式的另一种作法是Class Adapter模式,在这个模式下,Adapter直接继承Adaptee(要引进的新类别),以拥有当中的成员及方法,在C++中的话可以这么作:
adapter-3.jpg
C++中可以多重继承,但在Java中不行,所以在Java中若要采用Class Adapter,必须作点修改,一方面继承Adaptee,一方面实作Target的介面:
adapter-4.jpg
代码的实现是这样的:
public class Adapter extends Adaptee implements Target {
// ....
}
当然,这必须您原先的Target定义了共同的介面,所以Class Adapter在Java中适用的场合较少,事实上,也比较建议使用Object Adapter,这样的Adapter模式比较有弹性,例如,您可以在Adapter上加上个setter,以随时可以抽换Adaptee。
在Java中,Class Adapter的一个应用场合是达到多重继承的效果,您一定在很多时候听别人说,介面(interface)可以达到多重继承的效果,这是怎么回事?
其实要讨论这个问题,首先您对于C++中多重继承要先有认识,新手看了书说介面可以达到多重继承,切莫人云亦云,尤其是没有学过C++的新手们,如果您对于C++多重继承想要有所认识,请先看看 多重继承(一)与 多重继承(二)。
Java不能多重继承,但为何说Java中可以使用介面(interface)来达到多重继承的效果,首先效果之一,就如 多重继承(二) 中描述的“ 多重继承时通常其中一个基底类别作为private实作体,而其它的用以表现完全的抽象介面。”,在Java中这个效果可以使用介面来达到,介面此时所扮演的即 多重继承(二) 中的抽象类别,一个完全的抽象介面,这个效果的达成方式,如 介面(interface)型态 中所介绍的,您可以直接对应这两个主题中的程式实作来了解,了解Java中如何使用介面(interface)来达到C++中所谓多重继承的“一种”效果。
来看看另一个情况。
如果有SomeClass类别与OtherClass类别,您想要SomeAndOther类别可以同时拥有SomeClass类别与 OtherClass类别中已定义好的操作,并可以进行多型操作,在C++中可以用多重继承来达到,但在Java中显然的无法使用多重继承,怎么办?您可以在设计上先绕个弯,先使用两个介面分别定义好SomeClass与OtherClass两个类别的公开方法,例如:
public interface ISome {
public void doSome();
}
public interface IOther {
public void doOther();
}
接着让SomeClass与OtherClass分别实作两个介面:
public class SomeClass implements ISome {
public void doSome() {
....
}
}
public class OtherClass implements IOther {
public void doOther() {
....
}
}
SomeAndOther如何同时拥有两个SomeClass与OtherClass类别已定义好的操作?并可以多型操作?SomeAndOther可以继承其中之一,并拥有其中之一,例如:
public class SomeAndOther extends SomeClass implements IOther {
private IOther other = new OtherClass();
public void doOther() {
other.doOther();
}
}
虽不满意,但至少解决了目前的问题,当然这边只是其中一例,毕竟C++是C++,Java是Java,两者语法并不是一对一的关系,视实际需求还可以变化一下。
我的小结:即as3里面使用多接口实现多重继承
- 大小: 10.5 KB
- 大小: 11 KB
分享到:
相关推荐
CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...
- **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **桥接模式(Bridge)**:将抽象部分与它的实现部分分离,使...
适配器模式(Adapter)将两个不兼容的接口转换为一个可操作的接口。这在Java中很常见,比如将不同类型的集合转换为ArrayList或LinkedList。 策略模式(Strategy)定义了一系列算法,并将每个算法封装起来,使它们...
本资料"Swift DesignPattern"包含了一些Swift语言中的常见设计模式实例,下面我们将详细探讨这些设计模式及其在Swift中的应用。 1. **单例模式(Singleton)**:单例模式确保一个类只有一个实例,并提供全局访问点...
namespace DesignPattern_Adapter { // Adaptee class Adaptee { public: void SpecialRequest() {} }; // Target class Target { public: virtual void Request() = 0; }; // Adapter class Adapter...
这个名为"Python-Design-Pattern"的压缩包文件很可能是包含了一系列关于Python设计模式的示例、解释和实践项目。下面我们将详细探讨Python中的设计模式。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局...
本项目"design-pattern-example"正是一个以Java语言实现的设计模式示例集。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,通常通过双重检查锁定、静态内部类或枚举等方式实现。例如,`...
2. 结构型模式:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和代理模式(Proxy)。这些模式主要处理对象之间的...
《Design Pattern实验指导手册6》主要探讨了设计模式中的结构性模式——适配器模式(Adapter Pattern)。适配器模式是一种结构型设计模式,它的主要目的是解决不同接口或类之间的兼容性问题,使得原本不兼容的类能够...
namespace DesignPatterns.AdapterPattern.Structural.ObjectAdapter{ public class Adaptee { public void SpecificRequest() { Console.WriteLine("Called SpecificRequest()"); } }}Adapter.cs:using System;...
5. 适配器模式(Adapter Pattern):允许两个不兼容的接口之间进行通信。Java中,可以使用类适配器或对象适配器模式,通过继承或组合来实现接口的转换。 6. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离...
If you have ever bought ...Private Class Data Proxy Behavioral patterns Chain of Responsibility Command Interpreter Iterator Mediator Memento Null Object Observer State Strategy Template Method Visitor
:grinning_face:点击查看电子书,体验更好 :backhand_index_pointing_right: 创建型 (Creational)Java Kotlin结构型(Structural)适配器模式(Adapter Class/Object Pattern) Java桥接模式(Bridge Pattern) ...
Object Oriented Analysis and Design 12Singleton - MotivationA Singleton pattern ensures that a class has only one instance and provides a global point of access to that instance. This is beneficial ...
##### 适配器模式(Adapter Pattern) 适配器模式使得一个接口不兼容的类可以一起工作。它通过创建一个适配器类,将原接口转换为目标接口所期望的形式。 ```javascript class Target { request() { return '...
"DesignPattern"这个标题暗示我们将探讨在Ruby中应用的设计模式。 在Ruby中,有多种设计模式可以分为三类:创建型、结构型和行为型。这些模式都是从面向对象编程的原则和实践中提炼出来的,旨在提高代码的复用性和...
- **适配器模式**(Adapter Pattern) - 使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **装饰器模式**(Decorator Pattern) - 动态地给一个对象添加一些额外的职责,提供了一种替代继承机制的...
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 **适用性**: - 当想使用一些已经存在的子类,但是其接口不符合需求时。 - 想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的...