组合的实现
Posted qiangayz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合的实现相关的知识,希望对你有一定的参考价值。
组合的场景出现在两个类需要协同工作的时候,这个时候需要考虑到解耦,不能让两个类之间有直接的关系,因为有可能有功能相似的类作用于第三个类里面
例如两个处理数据库的类功能相等,但是分为两个,如果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()
这样会出现的问题,架构越来越大,层级越来越盛,有没有一种方法可以省略掉之前的继承
以上是关于组合的实现的主要内容,如果未能解决你的问题,请参考以下文章