当前位置: 首页 > article >正文

【Rust设计模式之新类型模式】

Rust设计模式之新类型模式

  • 前言
  • 代码
  • 总结


前言

类型驱动一节中有提及过新类型模式,新类型模式是类型驱动的一种方式,主要是通过新类型的封装让使用者不用考虑原来类型的细节,也保证了privacy,从而避免不必要的bug,如开发者的误操作将输入性数据修改等等。


代码


#[derive(Debug)]
struct People {
    name: String,
    age: u32,
    address: String,
}

impl People {
    pub fn new(name: String, age: u32, address: String) -> Self {
        People { name, age, address }
    }
}

// 新类型
#[derive(Debug)]
pub struct Student(People);

impl Student {
    pub fn new() -> Self {
        Student(People::new(
            "buddy".to_string(),
            20,
            "queenstreet".to_string(),
        ))
    }

    pub fn show(&self) {
        println!("{:?}", self);
    }
}

fn main() {
    let b = Student::new();
    b.show();
}

总结

新类型模式通常情况下直接使用元组结构体将本来的类型转换为一目了然的名称,借助元组结构体内部元素不可见性,保护内部元素不被修改,同时也降低了开发者的思考难度,需要注意的是,正是因为开发者借助了元组结构体的内部不可见性,在实现时不要再将内部元素设置为pub否则也就失去了封装的意义。


http://www.kler.cn/a/397861.html

相关文章:

  • spring-cache concurrentHashMap 自定义过期时间
  • 高级数据结构——hash表与布隆过滤器
  • stm32——通用定时器时钟知识点
  • 微信小程序 === 使用腾讯地图选点
  • 数字IC后端低功耗设计实现案例分享(3个power domain,2个voltage domain)
  • 论文阅读 - Causally Regularized Learning with Agnostic Data Selection
  • Android加载pdf
  • 鸿蒙HarmonyOS 地图不显示解决方案
  • ssm105基于JAVAEE技术校园车辆管理系统+jsp(论文+源码)_kaic
  • 力扣-Mysql-3278. 寻找数据科学家职位的候选人 II(中等)
  • 交易术语汇总(Technical Trading Dictionary)
  • FastAdmin 部署二开项目遇到 “No input file specified“ 的解决方案
  • 整数唯一分解定理
  • (干货)Jenkins使用kubernetes插件连接k8s的认证方式
  • MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中
  • 连续九届EI稳定|江苏科技大学主办
  • pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告
  • Qt篇——简单调用yolov3模型识别常见物品
  • apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义【一】
  • 推荐一个超漂亮ui的网页应用设计
  • C#版使用融合通信API发送手机短信息
  • P1325 雷达安装
  • 如何在 Ubuntu 22.04 LTS 上安装 Nextcloud
  • antd proFromSelect 懒加载+模糊查询
  • 基于BERT的情感分析
  • 若依笔记(十):芋道的菜单权限与数据隔离