码迷,mamicode.com
首页 > 其他好文 > 详细

组合的实现

时间:2018-07-23 00:56:01      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:实现   现在   pass   操作   使用   函数   foo   功能   pytho   

组合的场景出现在两个类需要协同工作的时候,这个时候需要考虑到解耦,不能让两个类之间有直接的关系,因为有可能有功能相似的类作用于第三个类里面

例如两个处理数据库的类功能相等,但是分为两个,如果Userinfo里面写死,就不能用第三个类了

实现原理:把一个对象当做参数传进来,而不是在该类的内部实例化,这样降低了类和类之间的耦合。

class SqlHelper:
    def get_one_data(self):
        pass
    def get_many_data(self):
        pass
    def get_all_data(self):
        pass
class MysqlHelper:
    def get_one_data(self):
        pass
    def get_many_data(self):
        pass
    def get_all_data(self):
        pass

class UserInfo:
    def __init__(self,helper):
        #self.sql = SqlHelper()
        self.sql = helper

    def login(self):
        #数据库操作
        self.sql.get_one_data()

    def user_list(self):
        self.sql.get_all_data()

h = SqlHelper()
obj = UserInfo(h)
obj.login()

  

另一种场景:

如果SQL函数还依赖一个类,即使用SQL类的时候同样的需要初始化一个类,然后把这个类当做参数传进来。

class foo:
    def f1(self):
        pass
    def f2(self):
        pass

class SqlHelper:
    def __init__(self,f):
        self.foo = f
    def get_one_data(self):
        self.foo.f1()
        pass
    def get_many_data(self):
        pass
    def get_all_data(self):
        pass
class MysqlHelper:
    def __init__(self,f):
        self.foo = f
    def get_one_data(self):
        pass
    def get_many_data(self):
        pass
    def get_all_data(self):
        pass

class UserInfo:
    def __init__(self,helper):
        #self.sql = SqlHelper()
        self.sql = helper

    def login(self):
        #数据库操作
        self.sql.get_one_data()

    def user_list(self):
        self.sql.get_all_data()

f = foo()
h = SqlHelper(f)
obj = UserInfo(h)
obj.login()

  

这样会出现的问题,架构越来越大,层级越来越盛,有没有一种方法可以省略掉之前的继承

组合的实现

标签:实现   现在   pass   操作   使用   函数   foo   功能   pytho   

原文地址:https://www.cnblogs.com/qiangayz/p/9352253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!