免费的ai素材网站,企业网站备案怎么搞,网站建设收费标准市场,鲜花网站的数据库建设设计模式—结构型模式之适配器模式
将一个接口转换成客户希望的另一个接口#xff0c;适配器模式使接口不兼容的那些类可以一起工作#xff0c;适配器模式分为类结构型模式#xff08;继承#xff09;和对象结构型模式#xff08;组合#xff09;两种#xff0c;前者适配器模式使接口不兼容的那些类可以一起工作适配器模式分为类结构型模式继承和对象结构型模式组合两种前者继承类之间的耦合度比后者高且要求程序员了解现有组件库中的相关组件的内部结构所以应用相对较少些。
别名也可以是Wrapper包装器。
适配器模式Adapter包含以下主要角色。
目标Target接口可以是抽象类或接口。客户希望直接用的接口。适配者Adaptee类隐藏的转换接口。适配器Adapter类它是一个转换器通过继承或引用适配者的对象把适配者接口转换成目标接口。
举例
比如我们需要一个播放器类可以根据不同的国家提供相应字幕的功能。我们不应该修改播放器我们需要写一个适配器类来进行字幕转换。
播放电影接口如下
/*** 提供原有接口可以播放电影并且返回字幕*/
public interface Player {String play();
}电影播放器类如下
/*** 电影播放器*/
public class MoviePlayer implements Player{Overridepublic String play() {String content 你好世界;//打印字幕System.out.println(content);return content;}
}如果是我们自己看的话直接进行如下操作即可
public class AdapatorTest {public static void main(String[] args) {MoviePlayer moviePlayer new MoviePlayer();moviePlayer.play();}
}但是如果有一个以英文为语言的人来看的话就不行了。
所以我们需要一个适配器来为英文适配。
翻译文本内容的接口如下
/*** 提供接口翻译文本内容*/
public interface Translator {String translate(String content);
}中文翻译为英文的类如下
/*** 中文---》英文的翻译器*/
public class ZhToEnTranslator implements Translator{/*** 简单示意翻译* param content 需要翻译的内容* return 翻译的内容*/Overridepublic String translate(String content) {//省略判空if(content.contains(你好)){content content.replace(你好,Hello);}if(content.contains(世界)){content content.replace(世界,World);}return content;}
}运行如下 类适配器
使用继承的方式来进行适配。
英文适配器如下
/*** 做英文适配*/
public class EnglishMoviePlayerAdapter extends ZhToEnTranslator implements Player {//被适配对象private Player target;public EnglishMoviePlayerAdapter(Player target) {this.target target;}Overridepublic String play() {String play target.play();//翻译String translate translate(play);System.out.println(English:translate);return translate;}
}测试如下
public class ClazzAdapaterTest {public static void main(String[] args) {MoviePlayer moviePlayer new MoviePlayer();EnglishMoviePlayerAdapter englishMoviePlayerAdapter new EnglishMoviePlayerAdapter(moviePlayer);englishMoviePlayerAdapter.play();}
}运行如下 对象组合适配器
使用对象组合的方法来进行适配
/*** 做英文适配*/
public class EnglishMoviePlayerAdapter implements Player {private Translator translator new ZhToEnTranslator();//被适配对象private Player target;public EnglishMoviePlayerAdapter(Player target) {this.target target;}Overridepublic String play() {String play target.play();//翻译String translate translator.translate(play);System.out.println(English:translate);return translate;}
}测试类如下
public class ObjAdapaterTest {public static void main(String[] args) {MoviePlayer moviePlayer new MoviePlayer();EnglishMoviePlayerAdapter englishMoviePlayerAdapter new EnglishMoviePlayerAdapter(moviePlayer);englishMoviePlayerAdapter.play();}
}运行如下