“Github:https://github.com/nateshao/design-demo/tree/main/JavaDesignPatterns
类结构型模式
“关心类的组合,由多个类组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系
对象结构型模式
“关心类与对象的组合,通过关联关系,在一个类中定义另一个类的实例对象,然后通过该对象调用相应的方法
结构型模式一览表
电源适配器
分析
现实生活:
软件开发:
适配器模式的定义
“适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
对象结构型模式 / 类结构型模式
适配器模式的结构(类适配器)
适配器模式的结构(对象适配器)
适配器模式包含以下3个角色:
典型的类适配器代码:
public class Adapter extends Adaptee implements Target {
public void request() {
super.specificRequest();
}
}
典型的对象适配器代码:
public class Adapter extends Target {
private Adaptee adaptee; //维持一个对适配者对象的引用
public Adapter(Adaptee adaptee) {
this.adaptee=adaptee;
}
public void request() {
adaptee.specificRequest(); //转发调用
}
}
实例说明:
某公司欲开发一款儿童玩具汽车,为了更好地吸引小朋友的注意力,该玩具汽车在移动过程中伴随着灯光闪烁和声音提示。在该公司以往的产品中已经实现了控制灯光闪烁(例如警灯闪烁)和声音提示(例如警笛音效)的程序,为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,现使用适配器模式设计该玩具汽车控制软件。
实例类图:
实例代码
结果及分析
将具体适配器类的类名存储在配置文件中
扩展方便
<?xml version="1.0"?>
<config>
<className>designpatterns.adapter.PoliceCarAdapter</className>
</config>
“定义:缺省适配器模式(Default Adapter Pattern):当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况,又称为单接口适配器模式。
实现:
缺省适配器类的典型代码片段:
public abstract class AbstractServiceClass implements ServiceInterface {
public void serviceMethod1() { } //空方法
public void serviceMethod2() { } //空方法
public void serviceMethod3() { } //空方法
}
结构
实现:双向适配器典型代码片段
public class Adapter implements Target,Adaptee {
private Target target;
private Adaptee adaptee;
public Adapter(Target target) {
this.target = target;
}
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
public void specificRequest() {
target.request();
}
}
模式优点
模式缺点
模式适用环境