设计模式(十六)——适配器模式(Adapter)
当两个不兼容的接口需要一起工作,但是两个接口都无法改动,可以用到适配器模式
优点
可以让任何两个没有关联的类一起运行
缺点
过多地使用适配器,会让系统非常零乱,不易整体进行把握
实现
现有美国人和英国人交流,可以使用英语,但是和中国人交流时,语言不通,此时需要一个适配器来翻译双方的语言。
public abstract class People {
public abstract void say(String str);
public abstract void sayToPeople(People people, String str);
public abstract void getSay(String str);
}
public class England extends People{
@Override
public void say(String str) {
System.out.println("英国人说:"+str);
}
@Override
public void sayToPeople(People people, String str) {
say(str);
people.getSay(str);
}
@Override
public void getSay(String str) {
if(str=="Hello"){
System.out.println("英国人回复:Hi");
}else if (str=="Nice to meet you"){
System.out.println("英国人回复:Nice to meet you too");
}
}
}
public class American extends People{
@Override
public void say(String str) {
System.out.println("美国人说:"+str);
}
@Override
public void sayToPeople(People people, String str) {
say(str);
people.getSay(str);
}
@Override
public void getSay(String str) {
if(str=="Hello"){
System.out.println("美国人回复:Hi");
}else if (str=="Nice to meet you"){
System.out.println("美国人回复:Nice to meet you too");
}
}
}
public class Main {
public static void main(String[] args) {
American american = new American();
England england = new England();
england.sayToPeople(american,"Hello");
}
}
英国人和美国人可以正常沟通。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDeywJIE-1686647418952)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220623143714420.png)]
但是当美国人说英语和中国人沟通时,由于中国人只说汉语,所以两者之间无法沟通
public class Chinese extends People{
@Override
public void say(String str) {
System.out.println("中国人说:"+str);
}
@Override
public void sayToPeople(People people, String str) {
say(str);
people.getSay(str);
}
@Override
public void getSay(String str) {
if(str=="你好"){
System.out.println("中国人回复:你也好");
}else if (str=="早上好"){
System.out.println("中国人回复:吃早饭了吗");
}
}
}
这时要用到适配器
public interface Adapter {
public void request(People people,String str);
}
将英语转化成汉语,之后中国人就可以进行沟通
public class AmericanToChineseAdapter implements Adapter{
Chinese chinese = new Chinese();
@Override
public void request(People people,String str) {
people.say(str);
if(str=="Hello"){
chinese.getSay("你好");
}else if(str=="Good Morning"){
chinese.getSay("早上好");
}
}
}
public class Main {
public static void main(String[] args) {
American american = new American();
England england = new England();
AmericanToChineseAdapter am = new AmericanToChineseAdapter();
am.request(american,"Hello");
}
}
运行结果:


适配器模式用于使不兼容的接口能够协同工作。在示例中,通过创建适配器,使得美国人(American)和中国人(Chinese)能用不同的语言进行交流。当美国人的英语需要被中国人理解时,适配器将英语转换为汉语,实现了双方的沟通。
876

被折叠的 条评论
为什么被折叠?



