Java实现适配器模式|策略模式

有个需求,系统要接收外部不同渠道的流量,每个渠道的数据格式有所不同,需要将它们进行特定的处理以符合系统所定义的数据要求,实现这个需求考虑使用适配器模式

我们可以为每个数据源编写一个适配器类,数据转换成期望的格式再送入系统

这个有点像适配器模式,但感觉又不是适配器模式

Target:客户期望获得的功能接口(本地系统期待的数据类型)
Cilent:客户,期望访问Target接口(就是基于本地系统期待的数据类型进行操作)
Adaptee:现有接口,这个接口需要被适配(第三方数据)
Adapter:适配器类,适配现有接口使其符合客户需求接口(把第三方数据转换为本地系统期待的数据类型)

也就是说,当前系统只具备adaptee的功能,但是我期望的是target中的功能;所以我们使用adapter来继承当前adaptee的功能并且实现target的功能。

上面说到的适配器模式都是对于功能的应用,而我们的需求是:将外部数据处理成符合我们系统的数据格式;但本质上的思想是差不多的

所以适配器类就是继承Adaptee实现target接口,但是我们的需求比较特殊,是对数据进行转换,而不是方法转换;即定义一个父类适配器,有个抽象的数据转换方法,子类适配器实现该方法,将自身格式的数据转换为targetData

实现思路

定义一个适配器抽象类,用于转换数据

public abstract class Adapter<T extends BaseData> { // 这里其实不需要extends BaseData,这样的实现方式是为了要T限制在数据处理,而不是随便一个入参都行
    public abstract TargetData transform(T t);
}

方法入参是不同格式的外部数据,返回值是我们的目标数据;为了实现这个需求,我们使用了泛型类,T为BaseData的子类;这样定义也是很合理的,因为外部数据有所不同,但是他们还是有一些必须的共同参数;

然后每次接入新的数据源,我们就定义一个适配器,继承Adapter实现相应的transform方法就可以了

@Component
public class DouyinAdapter extends Adapter<DouyinData> { // 这里泛型指定为对应的数据类型
    @Override
    public TargetData transform(DouyinData douyinData) {
        // 相关数据转换操作
        return targetData;
    }
}

然后就可以啦,我们来看看调用

@RestController
public class DataController {
    @Autowired
    private DataService dataService;

    @Autowired
    private DouyinAdapter douyinAdapter;

    @PostMapping(value = "/douyin")
    public int handleData(@RequestBody DouyinData data) {
        TargetData targetData = douyinAdapter.transform(data); // 注意,从这个角度看很像是策略模式,但是策略模式的入参是一致的,而我这里要对不同类型的数据进行处理,不可能直接用父类BaseData,所以严格来看,我使用的是适配器模式和策略模式思想的组合
        dataService.handleMyData(targetData);
        return 1;
    }
}

是不是很简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 设计模式有很多种,每一种都有不同的实现方式。以下是一些常见的 Java 设计模式及其实现方式: 1. 工厂模式:通过一个工厂类来创建对象,而不是直接在代码中实例化对象。可以使用简单工厂模式、工厂方法模式或抽象工厂模式来实现。 2. 单例模式:确保一个类只有一个实例,并提供全局访问点。可以使用饿汉式单例、懒汉式单例或双重检查锁定单例来实现。 3. 建造者模式:将一个复杂对象的构建过程分解为多个简单对象的构建过程,然后按照一定的顺序组合起来。可以使用链式调用或者建造者接口来实现。 4. 适配器模式:将一个类的接口转换成客户端所期望的另一个接口。可以使用类适配器模式或对象适配器模式实现。 5. 装饰器模式:动态地给一个对象添加一些额外的职责,而不需要修改其原始类。可以使用继承或者组合来实现。 6. 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。可以使用 Java 内置的 Observer 和 Observable 类来实现。 7. 策略模式:定义一系列算法,将每个算法都封装起来,并使它们可以互换。可以使用接口或者抽象类来定义算法,然后使用组合来实现。 8. 模板方法模式:定义一个算法的骨架,将一些步骤延迟到子类中实现。可以使用抽象类来定义算法骨架,然后使用继承来实现。 9. 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。可以使用 Java 内置的 Iterator 接口来实现。 10. 外观模式:为子系统中的一组接口提供一个统一的接口,以便于访问子系统中的功能。可以使用一个外观类来封装子系统中的接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值