禅说设计模式之传输对象模式

82 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

序言

本人是一个java初学者的水平,工作的时候经常会使用java豆,如下:

public class UserBean {
    UserBean(String name){ this.name = name;}
    private String name;
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; }
}

一直使用这颗咖啡豆,却不知道它是传输者模式,真是只缘身在此山中啊。

名词解释

传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。

优点

在传输数据单元的时候,对特定数据单元做校验和数据操作,统一口径,避免了检查口径的混乱。

例子

在很多开源库的api中,配置的传递也都是通过一个统一的配置对象,传输配置对象来传递其所代表的行为。

不仅扩展方便,而且易于校验配置的正确性。

再比如原本我们有磁带听歌,mp3听歌,mp4看电影,大哥大打电话。后来,我们有了智能手机,只需要一部智能手机,我们就可以拥有多个部件的功能。一个传输对象打包带走。

代码示例

User传输对象

public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age < 0) {
            throw new Error("年龄不能为空");
        } else {
            this.age = age;
        }
    }
}

UserBO业务对象

import java.util.ArrayList;
import java.util.List;

public class UserBO {
    List<User> userList = new ArrayList<>();
            void setUser(User user) {
                userList.add(user);
            }
            User getUser(int index) {
                return userList.get(index);
            }
}

测试代码

UserBO ub = new UserBO();
User user = new User();
user.setName('jack');
user.setAge(19);
ub.setUser(user);
  • 这样书写的javabean在网络传输过程中,极易序列化,用于网络传输。
  • 一个对象中各个属性的校验只在对象中校验,不会在对象之外校验,确保了数据流向的清晰。
  • 抽象数据单元,有助于我们理清业务对象。