享元设计模式

享元设计模式

简单介绍

享元设计模式的基本原则就是多个对象共享一个类(Class)

享元模式的应用场景很多,比如,你要做邮箱,对于一个职场人士来讲,邮箱必须便捷,容错率高,渲染时间短,这时你就可以运用享元!享元会共享同一块内存,减少渲染时间

实现

在以下实例里,我们会模拟渲染邮件的过程

定义主类

邮件类,就叫他Email类吧!

Email类有几个参数

  • author 邮件发送人
  • addressee 收件人
  • topic 邮件标题
  • time 邮件发送时间
  • content 邮件内容

也就说,定义类的代码应该是

class Email:
    def __init__(self, author, addressee, topic, time, content):
        """初始化邮件内容"""
        self.author = author
        self.addressee = addressee
        self.topic = topic
        self.time = time
        self.content = content

我们还得定义一个用来接受邮件的函数,设置为__str__

    ...
    def __str__(self):
        """返回邮件内容"""
        result = """
        发件人: {}
        收件人: {}
        标题: {}
        发送时间: {}
        内容:
            {}
        """.format(self.author, self.addressee, self.topic, self.time)
        return result

Email类型的完整代码如下:

class Email:
    def __init__(self, author, addressee, topic, time, content):
        """初始化邮件内容"""
        self.author = author
        self.addressee = addressee
        self.topic = topic
        self.time = time
        self.content = content

    def __str__(self):
        """返回邮件内容"""
        result = """
        发件人: {}
        收件人: {}
        标题: {}
        发送时间: {}
        内容:
            {}
        """.format(self.author, self.addressee, self.topic, self.time, self.content)
        return result

实现管理邮件类

管理邮件类被叫做EmailManage

完整代码如下

class EmailManage:
    def __init__(self):
        self.EmailList = []
    
    def add(self, author, addressee, topic, time, content):
        """添加邮件"""
        self.EmailList.append(Email(self, author, addressee, topic, time, content))
    
    def search(self, author):
        """查询邮件"""
        for i in self.EmailList:
            if author in str(i).split('\n')[1]:
                return str(i)

主函数main

def main():
    emailmanage = EmailManage()
    while True:
        chose = input("请选择你的操作:\n1.添加邮件\n2.查询邮件\n")
        if chose == '1':
            author = input("请输入姓名:")
            addressee = input("请输入收件人:")
            topic = input("请输入主题:")
            time = input('请输入时间:')
            content = input('请输入内容:')
            emailmanage.add(author, addressee, topic, time, content)
        
        elif chose == '2':
            author = input("请输入姓名:")
            result = emailmanage.search(author)
            if result:
                print('-'*9, author, '-'*9)
                print(result)
            else:
                print('没有此人!')
main()

完整代码

完整代码如下:

class Email:
    def __init__(self, author, addressee, topic, time, content):
        """初始化邮件内容"""
        self.author = author
        self.addressee = addressee
        self.topic = topic
        self.time = time
        self.content = content

    def __str__(self):
        """返回邮件内容"""
        result = """
        发件人: {}
        收件人: {}
        标题: {}
        发送时间: {}
        内容:
            {}
        """.format(self.author, self.addressee, self.topic, self.time, self.content)
        return result

class EmailManage:
    def __init__(self):
        self.EmailList = []
    
    def add(self, author, addressee, topic, time, content):
        """添加邮件"""
        self.EmailList.append(Email(author, addressee, topic, time, content))
    
    def search(self, author):
        """查询邮件"""
        for i in self.EmailList:
            if author in str(i).split('\n')[1]:
                return str(i)

def main():
    emailmanage = EmailManage()
    while True:
        chose = input("请选择你的操作:\n1.添加邮件\n2.查询邮件\n")
        if chose == '1':
            author = input("请输入姓名:")
            addressee = input("请输入收件人:")
            topic = input("请输入主题:")
            time = input('请输入时间:')
            content = input('请输入内容:')
            emailmanage.add(author, addressee, topic, time, content)
        
        elif chose == '2':
            author = input("请输入姓名:")
            result = emailmanage.search(author)
            if result:
                print('-'*9, author, '-'*9)
                print(result)
            else:
                print('没有此人!')
main()

运行效果

这些代码是真实可运行的

运行结果如下:

PS D:\CSDN掘金> & C:/Users/S.X.Y/AppData/Local/Programs/Python/Python38-32/python.exe d:/CSDN掘金/享元.py
请选择你的操作:
1.添加邮件
2.查询邮件
1
请输入姓名:test_author
请输入收件人:test_a
请输入主题:test_topic
请输入时间:test_time
请输入内容:test_content
请选择你的操作:
1.添加邮件
2.查询邮件
2
请输入姓名:test_author
--------- test_author ---------

        发件人: test_author
        收件人: test_a
        标题: test_topic
        发送时间: test_time
        内容:
            test_content

请选择你的操作:
1.添加邮件
2.查询邮件
2
请输入姓名:test_content
没有此人!
请选择你的操作:
1.添加邮件
2.查询邮件

提示

享元模式还得满足以下条件:

  • 需要共享的对象数据不需要变化
  • 几个类似的对象必须要共享一个Class

例如上述代码,邮件的对象其实都是Email

享元模式的使用场景非常多,这里就不过多赘述,希望此文对大家有帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值