写出优雅代码

一. 封装,继承,多态

封装

尽可能隐藏一个模块的实现细节。原因:

  • 增加调用者负担,使用者在使用你的类时还要知道实现细节。
  • 耦合性。比如类内部有个成员是vector,那么外部应该用push_back等方法来操作,有一天需要换城map,那么所有调用方的代码都得改。

应该对外界提供访问数据的方法(getter、setter);而不是直接将数据等实现细节暴露出去。

继承

不能仅仅因为is-a和is-kind-of就定义为继承关系,必须是派生类能够适用基类所有继承方法,而不会逻辑不通而无法使用使用可能会造成安全隐患,否则不能成为继承关系。

  • 逻辑不通而无法使用:duck->bird,bird {fly(); run();} 而duck只能使用run,fly方法没法使用,所以不鞥作为继承关系。
  • 使用可能会造成安全隐患:stack->list,list有clear方法,但是应用在stack上会
    清楚所有元素,这是我们不想要的。如果定义成继承关系,使用者无意间调用了clear会引发严重的安全问题。

优先使用组合而非继承。继承是 behaves-like-a, is-substitutable-for 的关系,不是 is-a 或 is-a-kind-of 的关系

多态

相同的代码应用到不同场景就能表现出不同的行为。

二. 设计原则

单一职责

一个函数只干一件事。这里的一件事是指做具体的操作,只是调用了定义操作的函数,不算具体的操作。

#干了两件事,获取数据;数据格式化
def get_format_info():
	#get data from mysql
	#get data from redis
	return data.format()
	
#将数据访问封装成函数,这样get_format_info中自定义了流程,只干了一件事
def get_data():
	#get data from mysql
	#get data from redis
def get_format_info():
	data = get_data()
	return data.format()

参考:
https://www.zhihu.com/question/28492982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值