JZOOD面向对象设计 - C1 面向对象设计入门

1 SOLID原则

Single responsibility principle 单一责任原则

改的只有一个小的部分,也适合单元测试
解析:单一责任原则指的是一个类只有一项工作,例如一个格式化数据打印的类,类中的成员函数可以有Json格式化输出函数,String格式化输出函数,List格式化输出函数等等。这边的单一责任就是指这个类的唯一工作就是格式化输出数据。

第二种原则叫做O-Open Close Principle(开放封闭原则)

对扩展开放,对修改关闭
解析:抽象类不允许被直接创建对象,其他类的特性依旧存在。抽象类的实现应在继承该类的子类中去具体实现。抽象类中只负责定义该抽象方法。由于abstract 的方法需要在继承后的子类中实现,因此不可以 与final , private , static 共存。

L – Liskov substitution principle(里氏替换原则)和I – Interface segregation principle(接口分离原则)

机器人不能继承人的类
类不能继承不能实现的接口
解析1:SingleResponsibility 是为了解决后续维护中class过于臃肿的原则,InterfaceSegragation 是为了解决面向外部调用者让其他开发人员更容易明白不同接口的功能区别而总结的原则。
解析2:假设现在我们有一个interface提供给用户,但是里面有太多用户不需要的功能,显得我们的interface过于臃肿;那么这时候我们就要把这个大的接口根据功能再次细分,然后提供给不同的用户。这就叫接口分离。
解析3:当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类],一个类中一旦有抽象方法,必须定义成抽象类。子类在继承父类的时候一定要实现父类中的抽象方法,并且会自动继承除构造函数以外的Public和Protect方法,子类可以重写这些方法。此外,子类也可以自定义自身的方法。

最后一个原则是D–Dependency inversion principle(依赖反转原则)

抽象不应该依赖于具体实现,具体实现应该依赖于抽象,因为如果如果具体实现没了,你依赖它就会报错

2 例题和5C解题法

  • Clarify
    what (提问关键字):
    关键1:Elevator
    有没有承重不一样
    会不会分客梯和货梯
    关键2:Building
    是否有多处能搭乘的电梯
    how(针对规则来提问)
    判断是否电梯超重
    按下按钮,哪一台电梯会响应
    电梯运行的时候能否按下反向的楼层
  • Core Object
    以一个Object为基础,线性的把流程需要的Object写出来,比如 Request -> ElevatorSystem -> Elevator -> ElevatorButton
    确定Objects之间的关系,比如一对多,或者多对一
  • UML类图符号
    解析:在UML类图当中,每个方法和属性都会用前缀修饰符来表示其访问级别。若没有前缀修饰符则代表此方法或属性属于Package内都可访问,在不同Package内不能直接访问。若有修饰符:'+'表示Public,代表此方法或属性公开,能在任何地方都能直接访问;'-'表示Private,代表此方法或属性私有 ,只能通过类内部访问;'#'表示Protected,代表此方法或属性为保护,在同一个Package内可以访问,在另一个Package内需要通过子类继承才能进行访问。
  • Cases
    利用之前定义的CoreObject,列举每个Object对应产生的use case,如:


  • Class
    Use cases,对于use case更加详细地描述这个use case在做什么视频,针对这个描述去已有的Core Object填充进所需要的信息

    如:

    解析: 使用ENUM相当于提前定义了一个类只能从一组值当中选择,比如定义一个ENUM COLOR,可选的值为 RED, YELLOW, BLUE. 这样的方法和使用String / Integer 做为值相比使得代码的可读性大大提升;同时这样的ENUM告诉编译器传递进来的值只能从红黄蓝三色当中选取,避免错误;同样这个定义过的ENUM可以在任何地方被使用。但ENUM从运行速度上来说和其他做法并没有太大区别。
    使用异常处理来处理特殊的情况。
  • Strategy Design Pattern
    把策略变为interface,符合依赖翻转原则
    解析:当一个类只做一件事情的时候,它通常会有更少的函数/变量/接口, 使得这个类更容易被理解;同样,由于这个类只负责一件事,这个类的变化不容易影响到其他的类,使得代码更易维护,也更容易被其他需要相同功能的地方复用;至于高耦合 (Tighter Coupling),这其实是在设计当中我们避免出现的事情,它指的是类和类之间有很紧密的关联,所以SRP其实引导向的是一种好的设计模式,也就是高内聚,低耦合 (High Cohesion, Loose Coupling)。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容