前言
之前的文章主要研究了设计模式中的创建型设计模式,创建型设计模式主要包括工厂方法模式,抽象工厂模式,建造者模式,单例模式和原型模式。 从这篇文章开始继续研究设计模式中的结构型模式,顾名思义,结构型模式就是用来设计程序的结构的。结构型模式包括9种,本文只研究适配器模式
一、适配器模式
1.类适配器
Adapter类通过继承被适配类,实现adapter接口,实现对应的转换,简单的例子如下:
class HomeVoltage {
private int vol = 220;
public int show(){
System.out.println("电压为:" + vol + "V");
return vol;
}
}
interface VoltageAdapter{
public int adapter();
}
class VoltageAdapterImpl extends HomeVoltage implements VoltageAdapter{
public int adapter() {
int vol = show();
System.out.println("家庭电压转换为:" + vol + "V");
vol /= 44;
System.out.println("适配器将电压转换为:" + vol + "V");
return vol;
}
}
class Phone {
public void charge(VoltageAdapter adapter){
adapter.adapter();
}
}
public class ClassAdapter {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charge(new VoltageAdapterImpl());
}
}
其中VoltageAdapterImpl是具体的Adapter类,通过继承被适配类,实现VoltageAdapter接口来完成转换,也就是完成电压从220V到5V的转换。
2.对象适配器
![在这里插入图片描述](https://img-blog.csdnimg.cn/0775373a353040acaf407387bd5f0bb7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bq45Lq65bKz,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center
对象适配器,即将第一种适配器方法中获取被适配对象的方法从继承修改为聚合(简单理解就是:方法1是通过继承来获取被适配器对象的属性,而该种是直接定义被适配类对象),只需修改VoltageImpl方法即可,代码示例如下:
class VoltageAdapterImpl2 implements VoltageAdapter{
private HomeVoltage homeVoltage;
public int adapter() {
int vol = homeVoltage.show();
System.out.println("家庭电压转换为:" + vol + "V");
vol /= 44;
System.out.println("适配器将电压转换为:" + vol + "V");
return vol;
}
}
通过这种方法也可以实现转换,而且方式更加灵活。
3.接口适配器
接口适配器指的是,要被适配的对象有很多接口,但是实现接口的类可能不需要实现全部的方法,则可以选择性的实现对应的方法,而不需要全部实现,简单的代码示例如下:
interface VoltageAdapter2{
public void adapter5V(int vol);
public void adapter10V(int vol);
public void adapter20V(int vol);
public void adapter30V(int vol);
}
class VoltageAdapter3 implements VoltageAdapter2{
@Override
public void adapter5V(int vol) {
}
@Override
public void adapter10V(int vol) {
}
@Override
public void adapter20V(int vol) {
}
@Override
public void adapter30V(int vol) {
System.out.println("转换电压为: " + vol + "v");
}
}
class Conditioner {
public void charge(VoltageAdapter2 adapter){
adapter.adapter30V(30);
}
}
public class InterfaceAdapter {
public static void main(String[] args) {
Conditioner conditioner = new Conditioner();
conditioner.charge(new VoltageAdapter3());
}
}
空调适配器只实现了转换电压30v,而不是实现了全部的接口。不同的对象可以根据需求实现对应的接口进行适配。这就是对象适配器模式。
总结
参考:
https://blog.csdn.net/weixin_44198475/article/details/106630392 日拱一卒,功不唐捐,如有错误,恳请大家批评指证。
|