
面向对象编程心法: 「高内聚,低耦合」
第一式:
单一职责原则(Single responsibility principle)
A class should have only one reason to change.
一个函数只应该做好一件事情,这个函数就是高内聚
如果一个函数做了3件事,就很SB
这个世界上的好东西,只会专注的做好一件事情
持续练习
-
分数的加减乘除 – 提炼出「化简」与「处理符号」两个元功能
- 把分数化简写成单独的功能函数
func simplify() -> Fraction {}
- 把分子分母符号合并问题写成单独的函数
normalize() -> Fraction {}
- 把分数化简写成单独的功能函数
-
玩扑克 – 提炼出「摸一张牌」「发一张牌」两个元功能
- 摸牌这个动作,直接被分解成摸一张牌这个动作
func getOneCard(card: Card) {}
- 发牌这个动作,被归类到扑克自己的行为上,于是分解成从牌堆顶或牌堆底发出一张牌
func deal() -> Card? {}
- 摸牌这个动作,直接被分解成摸一张牌这个动作
-
生成随机数
-
专门为生成随机数,写了一个随机函数
func randomInt(min: UInt32, _ max: UInt32) -> Int { return Int(arc4random_uniform(max - min + 1) + min) }
-
-
奥特曼打小怪兽 – 提炼出「选怪兽」「检查是否死亡」两个元功能
- 奥特曼面对一堆小怪兽要从里面选一个攻击,这个选择的过程,就本单独拿出来做了一个函数
func pickOneMonster(mArray: [Monstet]) -> Monster {}
- 如果小怪兽都死了,那么游戏就结束了,这里就把判断小怪兽是不是都死了,单独写了一个函数
func isAllDead(mArray: [Monster]) -> Bool
{ }
- 奥特曼面对一堆小怪兽要从里面选一个攻击,这个选择的过程,就本单独拿出来做了一个函数
-
计算游泳池修建费用 – 提炼出「圆」这个元类
- 一个圆的游泳,外侧还有一个圆形环绕的过道,面对这种问题,我是把整个游泳池作为一个对象,但是老师给出的解答是,看到这两个两个玩意儿都是圆,所以他就针对圆做了一个圆的对象,这个圆的对象里有半径,计算周长,和计算面积.而我最初只是想针对这个问题而把游泳池场景作为一个整体,而你想想,天下的游泳池都是长这个样的吗?答案很明显了,这个类,你写出来,很难复用,所以,面对问题,一定要找到那种元级别的共同可复用点,然后针对这个很小的元单元设置一个元级的类,啊哈~
网友评论