中国建设银行网站的主要功能,大连网络推广营销,网站备案密码收不到,哪些网站是单页面Go和Java实现适配器模式
我们通过下面的实例来演示适配器模式的使用#xff0c;其中#xff0c;音频播放器设备只能播放 mp3 文件#xff0c;通过使用一个更高级
的音频播放器来播放 vlc 和 mp4 文件。
1、适配器模式
适配器模式是作为两个不兼容的接口之间的桥梁。这种…Go和Java实现适配器模式
我们通过下面的实例来演示适配器模式的使用其中音频播放器设备只能播放 mp3 文件通过使用一个更高级
的音频播放器来播放 vlc 和 mp4 文件。
1、适配器模式
适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式它结合了两个独立接口的
功能。
这种模式涉及到一个单一的类该类负责加入独立的或不兼容的接口功能。举个真实的例子读卡器是作为内存卡
和笔记本之间的适配器。您将内存卡插入读卡器再将读卡器插入笔记本这样就可以通过笔记本来读取内存卡。 意图将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作 的那些类可以一起工作。 主要解决主要解决在软件系统中常常要将一些现存的对象放到新的环境中而新环境要求的接口是现对 象不能满足的。 何时使用1、系统需要使用现有的类而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的 类用于与一些彼此之间没有太大关联的一些类包括一些可能在将来引进的类一起工作这些源类不一定有 一致的接口。 3、通过接口转换将一个类插入另一个类系中。比如老虎和飞禽现在多了一个飞虎在不 增加实体的需求下增加一个适配器在里面包容一个虎对象实现飞的接口。 如何解决继承或依赖推荐。 关键代码适配器继承或依赖已有的对象实现想要的目标接口。 应用实例1、美国电器 110V中国 220V就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供 了 Enumeration 接口而在 1.2 中提供了 Iterator 接口想要使用 1.2 的 JDK则要将以前系统的 Enumeration 接口转化为 Iterator 接口这时就需要适配器模式。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 jdbc。 优点1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性 好。 缺点1、过多地使用适配器会让系统非常零乱不易整体进行把握。比如明明看到调用的是 A 接口其 实内部被适配成了 B 接口的实现一个系统如果太多出现这种情况无异于一场灾难。因此如果不是很有必 要可以不使用适配器而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类所以至多只能适配一个适 配者类而且目标类必须是抽象类。 使用场景有动机地修改一个正常运行的系统的接口这时应该考虑使用适配器模式。 注意事项适配器不是在详细设计时添加的而是解决正在服役的项目的问题。 适用性 你想使用一个已经存在的类而它的接口不符合你的需求。 你想创建一个可以复用的类该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协 同工作。 (仅适用于对象Adapter)你想使用一些已经存在的子类但是不可能对每一个都进行子类化以匹配它们的接 口对象适配器可以适配它的父类接口。
2、Go实现适配器模式
package adapter// adapter
type MediaPlayerAdapter interface {Play(string)
}package adapterimport fmt// mp3
type Mp3Player struct {
}func (mp3Player *Mp3Player) PlayMp3(fileName string) {fmt.Println(Playing Mp3 File: , fileName)
}package adapter// mp3 adapter
type Mp3PlayerAdapter struct {Mp3Player
}func (mp3PlayerAdapter *Mp3PlayerAdapter) Play(fileName string) {mp3PlayerAdapter.Mp3Player.PlayMp3(fileName)
}package adapterimport fmt// mp4
type Mp4Player struct {
}func (mp4Player *Mp4Player) PlayMp4(fileName string) {fmt.Println(Playing Mp4 File: , fileName)
}package adapter// mp4 adapter
type Mp4PlayerAdapter struct {Mp4Player
}func (mp4PlayerAdapter *Mp4PlayerAdapter) Play(fileName string) {mp4PlayerAdapter.Mp4Player.PlayMp4(fileName)
}package adapterimport fmt// vlc
type VlcPlayer struct {
}func (vlcPlayer *VlcPlayer) PlayVlc(fileName string) {fmt.Println(Playing Vlc File: , fileName)
}package adapter// vlc adapter
type VlcPlayerAdapter struct {VlcPlayer
}func (vlcPlayerAdapter *VlcPlayerAdapter) Play(fileName string) {vlcPlayerAdapter.VlcPlayer.PlayVlc(fileName)
}package constantconst (Mp3 mp3Mp4 mp4Vlc vlc
)package adapterimport (proj/constant
)// adapter factory
type PlayerFactory struct {
}func (playerFactory *PlayerFactory) CreatePlayerAdapter(playerType string) MediaPlayerAdapter {switch playerType {case constant.Mp3:return Mp3PlayerAdapter{Mp3Player: Mp3Player{}}case constant.Mp4:return Mp4PlayerAdapter{Mp4Player: Mp4Player{}}case constant.Vlc:return VlcPlayerAdapter{VlcPlayer: VlcPlayer{}}}return nil
}package mainimport (. proj/adapterproj/constant
)func main() {// 工厂类playerFactory : PlayerFactory{}// mp3mp3PlayerAdapter : playerFactory.CreatePlayerAdapter(constant.Mp3)// Playing Mp3 File: qs.mp3mp3PlayerAdapter.Play(qs.mp3)// mp4mp4PlayerAdapter : playerFactory.CreatePlayerAdapter(constant.Mp4)// Playing Mp4 File: qs.mp4mp4PlayerAdapter.Play(qs.mp4)// vlcvlcPlayerAdapter : playerFactory.CreatePlayerAdapter(constant.Vlc)// Playing Vlc File: qs.vlcvlcPlayerAdapter.Play(qs.vlc)}下面再实现一个例子对适配器模式进行介绍。
笔记本通过读卡器去读取 TF 卡和 SD 卡。
package adapter// SDCard
type SDCard interface {ReadSD()
}package adapterimport fmt// SDCardImpl
type SDCardImpl struct {
}func (sDCardImpl *SDCardImpl) ReadSD() {fmt.Println(sdcard read msg!)
}package adapter// TFCard
type TFCard interface {ReadTF()
}package adapterimport fmt// TFCardImpl
type TFCardImpl struct {
}func (tFCardImpl *TFCardImpl) ReadTF() {fmt.Println(tfcard read msg!)
}package adapter// SDAdapterTF || SDCardImpl
type SDAdapterTF struct {TFCard
}func (sDAdapterTF *SDAdapterTF) ReadSD() {sDAdapterTF.TFCard.ReadTF()
}package adapter// Computer
type Computer interface {ReadSD(SDCard)
}package adapter// ComputerImpl
type ComputerImpl struct {
}func (computerImpl *ComputerImpl) ReadSD(sDCard SDCard) {sDCard.ReadSD()
}package mainimport . proj/adapterfunc main() {computer : ComputerImpl{}// sdcard// sdcard read msg!computer.ReadSD(SDCardImpl{})sDAdapterTF : SDAdapterTF{TFCard: TFCardImpl{}}// tfcard// tfcard read msg!computer.ReadSD(sDAdapterTF)
}3、Java实现适配器模式
package com.adapter;// adapter
public interface MediaPlayerAdapter {void play(String fileName);
}package com.adapter;// mp3
public class Mp3Player {public void playMp3(String fileName){System.out.println(Playing Mp3 File: fileName);}
}package com.adapter;// mp3 adapter
public class Mp3PlayerAdapter implements MediaPlayerAdapter {private Mp3Player mp3Player new Mp3Player();Overridepublic void play(String fileName) {mp3Player.playMp3(fileName);}
}package com.adapter;// mp4
public class Mp4Player {public void playMp4(String fileName){System.out.println(Playing Mp4 File: fileName);}
}package com.adapter;// mp4 adapter
public class Mp4PlayerAdapter implements MediaPlayerAdapter{private Mp4Player mp4Player new Mp4Player();Overridepublic void play(String fileName) {mp4Player.playMp4(fileName);}
}package com.adapter;// vlc
public class VlcPlayer {public void PlayVlc(String fileName){System.out.println(Playing Vlc File: fileName);}
}package com.adapter;// vlc adapter
public class VlcPlayerAdapter implements MediaPlayerAdapter{private VlcPlayer vlcPlayer new VlcPlayer();Overridepublic void play(String fileName) {vlcPlayer.PlayVlc(fileName);}
}package com.adapter;public enum PlayerType {MP3, MP4, VLC;
}package com.adapter;// adapter factory
public class PlayerFactory {public MediaPlayerAdapter createPlayerAdapter(PlayerType playerType){switch (playerType){case MP3:return new Mp3PlayerAdapter();case MP4:return new Mp4PlayerAdapter();case VLC:return new VlcPlayerAdapter();}return null;}
}package com.adapter;public class Test {public static void main(String[] args) {MediaPlayerAdapter mediaPlayerAdapter;// 工厂类PlayerFactory playerFactory new PlayerFactory();// mp3mediaPlayerAdapter playerFactory.createPlayerAdapter(PlayerType.MP3);// Playing Mp3 File: sq.mp3mediaPlayerAdapter.play(sq.mp3);// mp4mediaPlayerAdapter playerFactory.createPlayerAdapter(PlayerType.MP4);// Playing Mp4 File: sq.mp4mediaPlayerAdapter.play(sq.mp4);// vlcmediaPlayerAdapter playerFactory.createPlayerAdapter(PlayerType.VLC);// Playing Vlc File: sq.vlcmediaPlayerAdapter.play(sq.vlc);}
}下面再实现一个例子对适配器模式进行介绍。
笔记本通过读卡器去读取 TF 卡和 SD 卡。
package com.adapter;// SDCard
public interface SDCard {void readSD();
}package com.adapter;// SDCardImpl
public class SDCardImpl implements SDCard {Overridepublic void readSD() {System.out.println(sdcard read msg!);}
}package com.adapter;// TFCard
public interface TFCard {void readTF();
}package com.adapter;// TFCardImpl
public class TFCardImpl implements TFCard{Overridepublic void readTF() {System.out.println(tfcard read msg!);}
}package com.adapter;// SDAdapterTF || SDCardImpl
public class SDAdapterTF implements SDCard{private TFCard tfCard new TFCardImpl();Overridepublic void readSD() {tfCard.readTF();}
}package com.adapter;// Computer
public interface Computer {void readSD(SDCard sdCard);
}package com.adapter;// ComputerImpl
public class ComputerImpl implements Computer{Overridepublic void readSD(SDCard sdCard) {sdCard.readSD();}
}package com.adapter;public class Test {public static void main(String[] args) {Computer computer new ComputerImpl();// sdcardSDCard sdCard new SDCardImpl();// sdcard read msg!computer.readSD(sdCard);// tfcardSDAdapterTF sdAdapterTF new SDAdapterTF();// tfcard read msg!computer.readSD(sdAdapterTF);}
}