rust面向对象设计模式的实现详细分析(文章发布案例)

在这里插入图片描述

// main.rs
use t1::Post;   // t1修改为自己的项目名

fn main() {
    let mut blog = Post::new(); // 由发布创建草稿
    blog.add_text("这是发布的信息!"); // 草稿添加内容
    let blog = blog.request_review(); // 由草稿到预览
    let blog = blog.approve(); // 预览同意到发布
    println!("--------------------------");
    println!("发布的信息是 : {}", blog.content()); // 发布输出内容

    let blog = blog.unapprove(); // 由发布撤销至预览
    let mut blog = blog.reject(); // 由预览撤销至草稿
    blog.edit("信息修改了。"); // 草稿中修改

    // 需要留意下面的写法是行不通的,(注释掉的这一行)
    // 因为Rust 在语义上表达式与变量是有很大不同的,这涉及到一些生命周期的问题。
    // let blog_content = blog.request_review().approve().content();
    let blog = blog.request_review(); // 由草稿至预览
    let blog = blog.approve(); // 由预览至发布
    let blog_content = blog.content(); // 发布的内容
    println!("修改后的内容: {}", blog_content);
}
// lib.rs
/// 发布后的文章
pub struct Post {
    content: String,
}

/// 文章草稿
pub struct PostDraft {
    content: String,
}

/// 文章预览的状态
pub struct PostReview {
    content: String,
}

impl Post {
    /// 新建立一个草稿
    pub fn new() -> PostDraft {
        PostDraft {
            content: String::new(),
        }
    }

    /// 获取文章内容
    pub fn content(&self) -> &String {
        &self.content
    }

    /// 撤销文章的发布状态
    pub fn unapprove(self) -> PostReview {
        PostReview {
            content: self.content,
        }
    }
}

impl PostDraft {
    /// 返回一个预览状态的对象
    pub fn request_review(self) -> PostReview {
        PostReview {
            content: self.content,
        }
    }

    /// 向草稿添加文字
    pub fn add_text(&mut self, content: &str) {
        self.content.push_str(content); // 添加到末尾
    }

    /// 编辑文本
    pub fn edit(&mut self, content: &str) {
        self.content.clear(); // 清除字符串内容
        self.add_text(content); // 添加字符串
    }
}

impl PostReview {
    /// 发布
    pub fn approve(self) -> Post {
        Post {
            content: self.content,
        }
    }
    /// 撤销至草稿
    pub fn reject(self) -> PostDraft {
        PostDraft {
            content: self.content,
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值