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

      

  • 相关阅读:
    Visifire Chart控件设置 柱状图 条的宽窄
    silverlight+wcf 获得web参数
    Maven教程(转载)
    Eclipse插件CheckStyle的安装和使用
    log4net面面观之工作原理
    javabean实体类对象转为Map类型对象的方法(转发)
    ORACLE数据库创建用户名和表空间
    ORACLE 12C PDB 维护基础介绍
    int 与 Integer--话说数组转集合
    Shiro--权限控制
  • 原文地址:https://www.cnblogs.com/zanxiaofeng/p/5534239.html
Copyright © 2011-2022 走看看