目录
结构型模式属于组件生命周期中的创建
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些
日本友人看电影
<aside> 💡 核心:系统原来存在的所有接口都不能动,扩展一个新的类来连接之前不同的类
</aside>
实现适配器的两种方式:
类结构模型
package com.atguigu.design.structural.adapter.clazz;
import com.atguigu.design.structural.adapter.Player;
import com.atguigu.design.structural.adapter.Zh_JPTranslator;
/**
* 继承的方式:类结构模型,适配转换到了翻译器的功能上
*
*
*/
public class JPMoviePlayerAdapter extends Zh_JPTranslator implements Player {
private Player target;//被适配对象
public JPMoviePlayerAdapter(Player target){
this.target = target;
}
@Override
public String play() {
String play = target.play();
//转换字幕
String translate = translate(play);
System.out.println("日文:" + translate);
return play;
}
}
对象结构模型
package com.atguigu.design.structural.adapter.obj;
import com.atguigu.design.structural.adapter.Player;
import com.atguigu.design.structural.adapter.Translator;
import com.atguigu.design.structural.adapter.Zh_JPTranslator;
/**
* 组合的方式:对象结构模型,适配转换到了翻译器的功能上
*
* (继承、组合)、封装、多态
*
*
*
*/
public class JPMoviePlayerAdapter implements Player {
//组合的方式
private Translator translator = new Zh_JPTranslator();
private Player target;//被适配对象
public JPMoviePlayerAdapter(Player target){
this.target = target;
}
@Override
public String play() {
String play = target.play();
//转换字幕
String translate = translator.translate(play);
System.out.println("日文:"+translate);
return play;
}
}
将抽象和实现解耦,使两者都可以独立变化
桥接将继承转换为关联,降低类之间的耦合度,减少代码量
系统设计期间,如果这个类里面的一些东西,会扩展很多,这个东西就应该分离出来