标签:Target 适配器 类图 接口 public --- void class
适配器模式
定义:
将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。
类型:
结构型。
适用场景:
已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)
不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案。
优点:
能提高类的透明性和复用,现有的类复用但不需要改变
目标类和适配器类解耦,提高程序扩展性。
符合开闭原则。
缺点:
适配器编写过程需要全面考虑可能会增加系统的复杂性。
增加了系统代码可读的难度。
扩展
对象适配器:符合组合复用原则,使用委托机制
类适配器:通过类继承
适配器模式VS外观模式
都是对现有的类和系统的封装
外观定义了新的接口在现有系统中提供了方便的入口,适配器复用原有的接口,使两个已有的接口协同工作。外观的粒度更大。
代码:
//类适配器
//接口
public interface Target {
void request();
}
//接口实现类1
public class ConcreteTarget implements Target{
@Override
public void request() {
System.out.println("具体的Target");
}
}
//被适配者
public class Adaptee {
public void AdapteeRequest(){
System.out.println("被适配者的方法");
}
}
//适配器实现类
public class Adapter extends Adaptee implements Target{
@Override
public void request() {
super.AdapteeRequest();
}
}
//测试类
public class Test {
public static void main(String[] args) {
Target target=new ConcreteTarget();
target.request();
Target adapterTarget=new Adapter();
adapterTarget.request();
}
}
//对象适配器,只有适配器实现类改变了,所以只把适配器实现类抛出来
public class Adapter implements Target {
//这里不一样,可以对比一下。
private Adaptee adaptee=new Adaptee();
@Override
public void request() {
adaptee.AdapteeRequest();
}
}
//220V交流电转5V直流电示例
public class AC220 {
public int outputAC220V(){
int output=220;
System.out.println("220交流电");
return output;
}
}
//适配器接口
public interface DC5 {
public int outputDC5();
}
//实现类
public class Adapter implements DC5 {
private AC220 ac220 = new AC220();
public int outputDC5() {
int adapterInput=ac220.outputAC220V();
//变压器
int adapterOutput = adapterInput/44;
System.out.println("转换为" + adapterOutput+"直流电");
return adapterOutput;
}
}
//测试类
public class Test {
public static void main(String[] args) {
DC5 dc5=new Adapter();
dc5.outputDC5();
}
}
类图:
标签:Target,适配器,类图,接口,public,---,void,class 来源: https://blog.csdn.net/jjy19971023/article/details/110289543
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。