OOP面向对象编程的六大原则(上)

名词解释:

OOA:面向对象分析 A:Analyze

OOD:面向对象设计D:Design

OOP:面向对象编程P:Program


OOP六大原则(上):对象单一职责、里式替换原则、迪米特法则、开闭原则

对象单一职责我们设计的对象必须职责明确,不能让他成为万能类,这里的对象可以是模块、类库,程序集,不单单指类

1.特点:最常见的。比如分层:Model、业务层、UI层。把具有相同行为的类、放到一个模块,这个就是模块职责明确。

2.好处:每个类所包含的行为,属性都属于本身,后续的维护更具有针对性。也就是说这个类的修改,是独立的,不影响其他的类。(分工明确、)后续维护方便。

里式替换原则:子类必须能够替换掉它的父类类型,反之不行。

1.好处:因为父类,可以有多个子类对象,那这样的话,后续扩展会非常多。程序不需要修改就能够扩展。

2.提醒:其实也是从另外一个角度告诉我们,我们开发当中,需要尽量面向“抽象”编程。

公式:父类类型 变量 =new 子类类型();

实例如下:

新建控制台应用程序,新建父类打印类Printer


新建子类:惠普打印机类,HPPrinter,继承Printer,并对父类的抽象方法和虚方法进行重写。

Main方法中进行测试:



可见:

父类的普通方法,结果依然调用父类的普通方法;

父类的抽象方法,重写之后,调用的是子类重写的方法;

父类的虚方法,重写之后,调用的是子类重写的方法。

我们知道,虚方法,可以重写,可以不重写,那么不重写,是否调用的就是父类的虚方法呢?注意(抽象方法无具体实现,虚方法有具体实现,抽象方法必须得重写,不然报错,而虚方法可以重写,也可以不重写)


我们把子类重写的父类的虚方法注释掉:输出如下:


调用的果然是未被重写的虚方法:父类的测试方法!

迪米特法则和开闭原则

迪米特法则也叫最小化原则,或者说最小耦合。通常在设计程序和开发程序的时候,我们经常会讲,尽量高类聚,低耦合。而当两个对象之间交互的时候,会导致依赖的产生,我们把这种依赖叫做耦合。为了解决这个问题,OOP建议,这种耦合越少越好。

典型:就是一个对象作为另外一个对象的成员使用。

开闭原则:要去开放扩展,而封闭修改。也就是说,当需求变化的时候,我们可以增加对象,来扩展行为,而尽量少修改原有的对象。

下面代码实例:

前面我们创建的基类Printer打印类,和它的子类实现惠普打印机类,而根据迪米特法则,我们最好是设计一个中间类,来降低两个类之间的耦合。

IPrinter printer = new HPPrinter()

上述这种方式,如果需求发生变化,我们也必须去修改代码,重新编译。而根据开闭原则,我们应该少修改甚至不修改,关闭修改,而开放扩展。在这里,就是有了新的需求之后,增加新的对象,扩展行为。

所以:而当有新的需求变化,例如今年我们需要惠普打印机,而明年我们需要佳能打印机,这两个实现类的父类打印机类是不变的,我们需要将修改给封闭开放扩展内容。我们需要一个中间表类,来充当中介角色,在中间类当中,返回所需要的子类,即实现类对象,在那里面实现动态返回所需要的实现类。明年需要佳能打印机,只需要新建一个佳能打印机的实现,并将其写在配置文件当中,这时中介类则会根据配置文件动态读取,并实现返回我们需要的子类。

接下来,我们做出如下操作:

新建一个扩展类库,并新建一个中间类,简单工厂类:SimpleFactory.用来根据一个特定的需求,产生一个具体对象的类。

新建属性,PrinterType,这个属性私有,静态,并从配置文件当中动态读取。(注意core的程序需要自己新建配置文件),并且从Nuget中下载引用Configuration包。


实现成员GetPrinter方法,通过反射动态从程序集动态创建实例,并返回Pinter接口类的实现类:HPPrinter。

新建服务接口类库,Iservice,用于定义接口。新建IPrinter接口。

新建服务实现类库,Service,用于实现接口。新建惠普打印机实现类,HPPrinter,继承IPrinter。

此时:我们可以在Main方法中调用中间类SimpleFactory的方法。


测试如下:



注意:core项目中新建的config文件不要使用默认名,需要命名为App.config

好了,今天的学习到这里就结束了,欢迎关注微信公众号:dotNET学习天地

一起进步,更多资源等你来学习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容