1.设计模式的分类(按用途分类)
1)创建型模式。主要用于描述如何创建对象,如建造者模式
2)结构性模式。主要用于描述如何实现类和对象的组合。如今天要讲的适配器模式
也可以这样理解:描述了如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更强大的结构。
3)行为型模式。主要用于描述类或对象怎样交互以及怎样分配职责。如策略模式
2.切入正题,开始适配器模式的学习
1)来源于生活的例子
大家见过自己的笔记本充电器,充电器都有一个长方形的的“方块”,称为电源适配器,电压就是通过这个玩意变成笔记本的额定电压给笔记本充电的,在这里,引入适配器模式的四大角色。
适配器模式包含四个角色:目标抽象类定义客户要用的特定领域的接口(电脑的额定电压);适配器类可以调用另一个接口,作为一个转换器(“电源适配器”),对适配者和抽象目标类进行适配,它是适配器模式的核心;适配者类是被适配 的角色,它定义了一个已经存在的接口,这个接口需要适配(家庭电压过高,被适配为电器的额定电压);在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法。
生活着还有很多的这样的例子,都用到了这个思想,比如冰箱用的变压器,电脑上使用的usb转接头等等。
2)类图
类适配器类图
对象适配器类图
3)分析类图
1)找不同。类适配器喜欢让类适配器继承需要适配的适配者类,而对象适配器喜欢让适配器类加上一个适配器的成员变量。
2)不同的设计效果有什么异同呢?这可能是大家最想问的问题,也是我今天写这篇博文的一个出发点。同:都是为了将一个接口转换为客户希望的另一个接口,使接口不兼容的类可以一起工作。
3)放大招,大家有没有想过两种方法各自的好处在哪?类适配器模式使用的是继承,所以方便通过重写适配者的方法来动态改变适配者的功能。缺点:java只能单继承。所以只能继承一个适配者类。
而对象适配器模式可以组合很多的适配者,一个适配器类中可以使用很多不同的适配者方法。缺点:若适配者的方法需要重写,方法里的业务逻辑需要修改的时候,就有点麻烦了,在不违反开闭原则的情况下解决方法是写一个适配者的子类,让重写方法后的子类对象通过适配器的构造方法传入适配器。
public class DogAdapter implements Robot{
private Dog dog;
public DogAdapter() {
this.dog = new Dog();
}
/**
* 若有修改适配者方法的需求,可以将dog的子类通过构造方法传递给成员变量
* @param onedog
*/
public DogAdapter(Dog onedog) {
this.dog = onedog;
}
@Override
public void cry() {
System.out.println("机器人模仿:");
dog.wang();
}
@Override
public void move() {
System.out.println("机器人模仿:");
dog.run();
}
}
4)如果喜欢,希望为我点个赞,给我力量以创作更好的文章。