zoukankan      html  css  js  c++  java
  • 面向对象式设计和面向函数式设计

    面向对象式设计:

    class Checker(object):
        def check(self, context):
            pass
    
    class EmailChecker(Checker):
        def check(self, context):
            if not context['email'].lower() == 'zanxiaofeng@163.com':
                return "Email is error"
    
    class AccessCodeChecker(Checker):
        def check(self, context):
            if not context['access_code'].lower().startswith('wg'):
                return "AccessCode is error"
    
    class ComposedChecker(Checker):
        def __init__(self, *checkers):
            self.checkers = checkers
    
        def check(self, context):
            for checker in self.checkers:
                result = checker.check(context)
                return result if result else None
    
    class EmailAndAccessCodeChecker(ComposedChecker):
        def __init__(self):
            super().__init__(EmailChecker(), AccessCodeChecker())
    
    checker = EmailAndAccessCodeChecker()
    assert checker.check({'email': '', 'access_code': 'wg_123'}) == "Email is error"
    assert checker.check({'email': 'zanxiaofeng@163.com', 'access_code': 'wg_123'}) is None

    面向函数式设计:

    def email_check(context):
        if not context['email'].lower() == 'zanxiaofeng@163.com':
            return "Email is error"
    
    
    def access_code_check(context):
        if not context['access_code'].lower().startswith('wg'):
            return "AccessCode is error"
    
    
    def execute_checks(context, *checks):
        for check in checks:
            result = check(context)
            if result:
                return result
    
    
    def email_and_access_code_check(context):
        return execute_checks(context, email_check, access_code_check)
    
    assert email_and_access_code_check({'email': '', 'access_code': 'wg_123'}) == "Email is error"
    assert email_and_access_code_check({'email': 'zanxiaofeng@163.com', 'access_code': 'wg_123'}) is None

      

  • 相关阅读:
    tomcat常见错误
    tomcat——大致简介和执行过程
    JSON的基本操作
    VS Code 终端显示问题
    VS Code在本地进行调试和打开本地服务器
    重做了一下我的音乐播放器
    Treimu更新记录1.2.9.0
    Android开发中Eclipse里的智能提示设置
    一次面试经历
    正确处理WPF中Slider值改变事件的方式
  • 原文地址:https://www.cnblogs.com/zanxiaofeng/p/5534239.html
Copyright © 2011-2022 走看看