1.前言
- 设计模式共有23种(点击这里查看更多分类),根据目的准则分类,分为三类
- 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。
- 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 这里介绍一下适配器模式。
2.特点
- 定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2.1.代码说明
创建总的学习接口,如下:
public interface IStudy {
void study(String type, String content);
}
创建详细学习的接口,如下:
public interface ISpecifyStudy {
void studyJava(String content);
void studyPhp(String content);
}
实现详细学习的接口,处理相关逻辑,如下:
public class JavaStudy implements ISpecifyStudy {
@Override
public void studyJava(String content) {
System.out.println(content);
}
@Override
public void studyPhp(String content) {
//
}
}
public class PhpStudy implements ISpecifyStudy {
@Override
public void studyJava(String content) {
//
}
@Override
public void studyPhp(String content) {
System.out.println(content);
}
}
创建adapter,实现studyListener,如下:
public class StudyAdapter implements IStudy {
private ISpecifyStudy mStudy;
public StudyAdapter(String type) {
if (type.equalsIgnoreCase("java")) {
mStudy = new JavaStudy();
} else if (type.equalsIgnoreCase("php")) {
mStudy = new PhpStudy();
}
}
@Override
public void study(String type, String content) {
if (type.equalsIgnoreCase("java")) {
mStudy.studyJava(content);
} else if (type.equalsIgnoreCase("php")) {
mStudy.studyPhp(content);
}
}
}
创建实体类,实现studyListener,如下:
public class Study implements IStudy {
@Override
public void study(String type, String content) {
if (type.equalsIgnoreCase("java") || type.equalsIgnoreCase("php")) {
StudyAdapter adapter = new StudyAdapter(type);
adapter.study(type, content);
} else {
System.out.println("未识别:" + type);
}
}
}
最终调用,如下:
Study study = new Study();
study.study("java","学习Java中...");
study.study("php","学习php中...");
study.study("js","看看js");
//---------------------打印日志-------------------------
//学习Java中...
//学习php中...
//未识别:js
2.2.优缺点
- 优点:1⃣️可以让任何两个没有关联的类一起运行。2⃣️提高了类的复用。3⃣️增加了类的透明度。4⃣️灵活性好。
- 缺点:1⃣️不能过多的使用适配器,否则系统非常的零乱。2⃣️JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
2.3.使用场景
- 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。
3.总结
有疑问可以留言!