敏捷软件开发第二部分(OCP:开放-封闭原则)
来源:互联网 发布:php留言板视频教程 编辑:程序博客网 时间:2024/04/30 21:45
巴拉巴拉傻逼渣,这周看了OCP跟LSP两个原则,但后者依旧看的不太明白,重新继续看,还有撸撸码。这周就记录一下OCP原则啦。
OCP:开放-封闭原则(The Open-Closed Principle)
遵循该原则设计出来的模块具有两个主要的特征
(1)对于拓展是开放的。这表示着一个模块的行为是可拓展的,当有需求时,可对该模块进行拓展,使其具有满足那些新改变的行为。
(2)对于修改是封闭的。对模块行为进行拓展时,不必改动模块的源代码。
举个渣子(举个违反OCP原则的例子~)
刚好肚子有点饿,举个相关的例子吧
列个枚举~(有段时间没接触C#了,基本语法忘了,如果有错的,请无视,这里关注的是模块的行为~)
(这里是小渣拥有的行为枚举)enum{ enum_行为_吃饼干 = 1, enum_行为_吃方便面}//这个是行为模块public class Action{ public Test(){} public void ExcuteAction(enum e) { if (e == enum.enum_行为_吃饼干) { Console.WriteLine("小渣好饿,果断吃了一包巧克力饼干!"); } else if (e == enum.enum_行为_吃方便面) { Console.WriteLine("小渣好饿,拆开最爱的公仔面一顿狂啃!"); } else { Console.WriteLine("我找不到你的行为,请添加对应行为操作。"); } }}//这里是业务代码(就是小渣现在自己想做的事,我现在饿了,我想吃泡面了!)namespace XiaoZha{ class XiaoZhaEat { static void Main(string[] args) { Action action = new Action(); //我想吃泡面了,因此 action.ExcuteAction(enum.enum_行为_吃方便面); } }}
好了,小渣成功的吃到方便面了。(然而现实并没有!)
小渣日复一日的吃着饼干泡面,坚持了一周之后,发现已经吃腻了,而且吃的尽是没营养的,这时必须强迫小渣吃点有营养的了,不然长久下去,小渣要挂掉的。
小渣决定增加了吃水果的行为。
enum{ enum_行为_吃饼干 = 1, enum_行为_吃方便面, enum_行为_吃水果}//这里执行吃水果的行为action.ExcuteAction(enum.enum_行为_吃水果);
执行之后会出现,我找不到你的行为,请添加对应行为操作。
这是怎么回事呢~
因为我们在枚举中追加了吃水果的行为了,可是并没有在行为模块拓展相应枚举的操作。
因此,我们同时必须在行为模块中<修改>
else if (e == enum.enum_行为_吃水果) { Console.WriteLine("小渣缺乏营养,吃苹果吃苹果!"); }//这里执行吃水果的行为action.ExcuteAction(enum.enum_行为_吃水果);
这次,小渣总算是顺利吃到了水果了。
但是,我们也发现了,一旦小渣想要更多或者除去不想要的行为之后,我们就必须不断地修改行为模块。
这就违反了OCP原则了。
所以我们将其改成以下方式,就可以随时随意的拓展行为了。
//将行为的枚举去除,更改为使用抽象接口的方式public interface EatAction{ void Eat();}//需要的行为通过实现接口的方式进行拓展public class EatInstantNoodles:EatAction{ public void Eat() { Console.WriteLine("小渣饿疯了,一次性吃了10碗方便面"); }}public class EatApple:EatAction{ public void Eat() { Console.WriteLine("小渣吃了一些苹果,营养得到补充~"); }}//需要更多的行为时直接按以上方式追加即可~//这个是行为模块public class Action{ public Test(){} public void ExcuteAction(EatAction a) { a.Eat(); }}//这里是业务代码namespace XiaoZha{ class XiaoZhaEat { static void Main(string[] args) { Action action = new Action(); //我要吃苹果 action.ExcuteAction(new EatApple()); } }}
这样就可以遵循OCP原则了,当小渣想拥有更多行为时,只需要创建一个类并实现EatAtion接口即可,而Action类却不会受到影响。这样对代码的维护也就更加方便啦~~
- 敏捷软件开发第二部分(OCP:开放-封闭原则)
- 敏捷软件开发——开放封闭原则OCP
- 敏捷软件开发——开放封闭原则OCP
- 敏捷软件开发——开放封闭原则OCP
- 敏捷软件开发——开放—封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放-封闭原则(OCP)
- 开放封闭原则--OCP
- OCP开放-封闭原则
- 开放封闭原则--OCP
- 开放封闭原则--OCP
- 开放封闭原则--OCP
- 开放封闭原则--OCP
- ssh登录docker容器
- #object C runtime 简介
- bzoj4059【Cerc2012】Non-boring sequences
- ORA-03137: TTC Protocol Internal Error : [12333] Using JDBC Driver (文档 ID 752297.1)
- 浅谈差异化与同质化
- 敏捷软件开发第二部分(OCP:开放-封闭原则)
- 进程与线程的区别
- 【2016杭电女生赛1008】【数据结构 动态节点线段树】Claris Loves Painting
- PHP实习(三)
- NOIP2015解题报告
- BATCHSQL--GoldenGate Parameter
- 【java SE基础】Java线程详解
- asynctask
- LIBSVM在matlab下的使用安装