面向对象设计中的开放封闭原则
面向对象设计中的开放封闭原则
面向对象设计中的开放封闭原则开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设 计原则,很多时候是为实现这一目标服务的。
一、开发封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
二、开放封闭原则主要体现在两个方面:
对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展 方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。关于这两个原则。
三:为什么要用到开放封闭原则?
我们在做任何系统的时候,都不要指望系统一开始就需求确定,这是不现实也是不科学的想法,既然需求一定是会变化的,那么我们如何在面对需求变化时,设计的网站或软件可以保持相对容易修改,保持相对稳定,不至于新的需求到来,整个推倒重做。只要保持开放封闭原则就可以做到
面对新需求的到来,要完成新的需求,对程序的改动是通过新增加代码完成的,不是通过修改现有代码完成的
四:开放封闭原则的两个问题?
开放封闭原则是说,你设计软件或网站的时候,时刻要把需求的变化考虑全面了,尽量的让这个类足够好,写好了就不去修改它,如果新的需求来了,增加一些类来完成新的需求,原来的代码能不动则不动。
五:开放封闭原则中的两个问题的解决办法
在我们最开始写程序的时候,假设需求变化不会发生,但当发生需求变化时,我们就立即(当发生小变化时,就及早的去想办法应对发生大变化的可能)构造抽象来隔离以后发生的同类变化,不能等到开发工作进行到一半了或很久了,在考虑抽象,考虑分离,那时候就很困难了
六:开放封闭原则的好处
遵循这个原则可以带来面向对象技术中声称的可维护,可扩展,可复用,灵活性好这些好处
七:开放封闭原则的注意事项
不要对应用程序中的每个部分都刻意的进行抽象,应该对应用程序中出现频繁变化的那部分构造抽象。
八、以银行业务员为例
//首先声明一个业务处理接口 public interface IBankProcess{ void Process();} public class DepositProcess : IBankProcess { public void Process() { //办理存款业务 Console.WriteLine("Process Deposit"); } } public class WithDrawProcess : IBankProcess { public void Process() { //办理取款业务 Console.WriteLine("Process WithDraw"); } } public class TransferProcess : IBankProcess { public void Process() { //办理转账业务 Console.WriteLine("Process Transfer"); } } public class BankStaff { private IBankProcess bankpro = null; public void BankHandle(Client client) { switch (client.Type) { //存款 case "Deposit": userProc = new DepositUser(); break; //转账 case "Transfer": userProc = new TransferUser(); break; //取款 case "WithDraw": userProc = new WithDrawUser(); break; } userProc.Process(); } } //这样当业务变更时,只需要修改对应的业务实现类就可以,其他不相干的业务就不必修改。当业务增加,只需要增加业务的实现就可以了。
- 面向对象设计中的开放封闭原则
- python对象创建流程(Python3.5面向对象与继承图文实例详解)
- python面向对象编写案例(Python面向对象程序设计示例小结)
- php面向对象怎么调用属性(PHP面向对象程序设计__tostring和__invoke用法分析)
- python内置函数一览表(Python面向对象程序设计构造函数和析构函数用法分析)
- php面向对象教程理解(PHP面向对象程序设计之构造方法和析构方法详解)
- javascript对象添加方法(详解JavaScript面向对象实战之封装拖拽对象)
- python3简单编程(Python3.5面向对象编程图文与实例详解)
- python面向对象练习方法(Python面向对象实现一个对象调用另一个对象操作示例)
- python面向对象使用方法(Python面向对象程序设计之私有属性及私有方法示例)
- php语言程序设计基础面向对象(PHP面向对象程序设计之对象的遍历操作示例)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- php面向对象编程代码(php面向对象程序设计入门教程)
- python支持面向对象的程序设计(Python面向对象程序设计之类的定义与继承简单示例)
- vue基础语法对象(浅析从面向对象思维理解Vue组件)
- python图书管理系统(python面向对象法实现图书管理系统)
- 心理学 四个金蟾,哪个最招财 测你今生的运势有多棒(心理学四个金蟾)
- 吉善缘《聚宝金蟾》金蟾招财摆件 三足全铜蟾蜍客厅店铺开业礼品(吉善缘聚宝金蟾金蟾招财摆件)
- 招财化煞神兽,金蟾变了(招财化煞神兽金蟾变了)
- 26岁杨紫的白素贞遇上24岁鞠婧祎,哪个最美(26岁杨紫的白素贞遇上24岁鞠婧祎)
- 鞠婧祎和杨紫两种风格的女生,你心里谁比较美(鞠婧祎和杨紫两种风格的女生)
- 三千年第一美女鞠婧祎出演白素贞pk杨紫,颜值胜赵雅芝王祖贤(三千年第一美女鞠婧祎出演白素贞pk杨紫)
热门推荐
- sql转字符串函数(sql中的常用的字符串处理函数大全)
- python字符串之基本操作小练习(Python数据类型之String字符串实例详解)
- 在css中用属性来实现文字环绕图片(css文字环绕图片—遇到的问题及快速解决方法)
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- linux系统的组成架构(Linux输入子系统框架原理解析)
- dedecms表单格式(DedeCMS arclist的分页使用教程)
- 使用RouteDebugger对MVC路由进行调试
- 排序算法口诀php(PHP快速排序算法实现的原理及代码详解)
- mac使用docker部署项目(如何在mac上用docker对Oracle进行部署使用)
- css赛博朋克风格效果(CSS几步实现赛博朋克2077风格视觉效果)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9