当前位置: 首页 > news >正文

网站建设服务费怎么写分录网站建设商城模板下载

网站建设服务费怎么写分录,网站建设商城模板下载,网站问题解决,网站平台是怎么做财务的设计模式的艺术P1基础—2.4-2.11 面向对象设计原则 2.4 面向对象设计原则概述 向对象设计的目标之一在于支持可维护性复用#xff0c;一方面需要实现设计方案或者源代码的重用#xff0c;另一方面要确保系统能够易于扩展和修改#xff0c;具有较好的灵活性。 面向对象设计…设计模式的艺术P1基础—2.4-2.11 面向对象设计原则 2.4 面向对象设计原则概述 向对象设计的目标之一在于支持可维护性复用一方面需要实现设计方案或者源代码的重用另一方面要确保系统能够易于扩展和修改具有较好的灵活性。 面向对象设计原则也是用于评价一个设计模式的使用效果的重要指标之一。 表2-2 7种常用的面向对象设计原则 2.5 单一职责原则 单一职责原则是最简单的面向对象设计原则它用于控制类的粒度大小。 单一职责原则Single Responsibility PrincipleSRP一个类只负责一个功能领域中的相应职责。或者可以定义为就一个类而言应该只有一个引起它变化的原因。 将这些职责进行分离将不同的职责封装在不同的类中即将不同的变化原因封装在不同的类中如果多个职责总是同时发生改变则可将它们封装在同一类中。 一个简单实例 针对某CRMCustomer Relationship Management客户关系管理系统中客户信息图形统计模块提出了如图2-13所示的初始设计方案结构图。 CustomerDataChart类中的方法说明如下getConnection方法用于连接数据库findCustomers方法用于查询所有的客户信息createChart方法用于创建图表displayChart方法用于显示图表。 现使用单一职责原则对其进行重构CustomerDataChart类承担了太多的职责既包含与数据库相关的方法又包含与图表生成和显示相关的方法。无论是修改数据库连接方式还是修改图表显示方式都需要修改该类它拥有不止一个引起它变化的原因违背了单一职责原则。 因此需要对该类进行拆分使其满足单一职责原则。类CustomerDataChart可拆分为如下3个类。 1DBUtil负责连接数据库包含数据库连接方法getConnection。 2CustomerDAO负责操作数据库中的Customer表包含对Customer表的增删改查等方法如findCustomers。 3CustomerDataChart负责图表的生成和显示包含方法createChart和displayChart。 2.6 开闭原则 开闭原则是面向对象的可复用设计的第一块基石它是最重要的面向对象设计原则。 开闭原则Open-Closed PrincipleOCP一个软件实体应当对扩展开放对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 在开闭原则的定义中软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。 为了满足开闭原则需要对系统进行抽象化设计抽象化是开闭原则的关键。 在很多面向对象编程语言中都提供了接口、抽象类等机制可以通过它们定义系统的抽象层再通过具体类来进行扩展。如果需要修改系统的行为无须对抽象层进行任何改动只需要增加新的具体类来实现新的业务功能即可实现在不修改已有代码的基础上扩展系统的功能达到开闭原则的要求。 在对每个模式进行优缺点评价时都会将开闭原则作为一个重要的评价依据以判断基于该模式设计的系统是否具备良好的灵活性和可扩展性。 2.7 里氏代换原则 里氏代换原则Liskov SubstitutionPrincipleLSP所有引用基类父类的地方必须能透明地使用其子类的对象。 里氏代换原则表明在软件中将一个基类对象替换成它的子类对象程序将不会产生任何错误和异常反过来则不成立。 例如我喜欢动物那我一定喜欢狗因为狗是动物的子类 里氏代换原则是实现开闭原则的重要方式之一。由于使用基类对象的地方都可以使用子类对象因此在程序中尽量使用基类类型来对对象进行定义而在运行时再确定其子类类型用子类对象来替换父类对象。 2.8 依赖倒转原则 如果说开闭原则是面向对象设计的目标的话那么依赖倒转原则就是面向对象设计的主要实现机制之一它是系统抽象化的具体实现。 依赖倒转原则Dependency Inversion PrincipleDIP抽象不应该依赖于细节细节应该依赖于抽象。换言之要针对接口编程而不是针对实现编程。 依赖倒转原则要求在程序代码中传递参数时或在关联关系中尽量引用层次高的抽象层类即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明以及数据类型的转换等而不要用具体类来做这些事情。 为了确保该原则的应用一个具体类应当只实现接口或抽象类中声明过的方法而不要给出多余的方法否则将无法调用到在子类中增加的新方法。 在实现依赖倒转原则时需要针对抽象层编程而将具体类的对象通过依赖注入Dependency InjectionDI的方式注入其他对象中。 依赖注入是指当一个对象要与其他对象发生依赖关系时通过抽象来注入所依赖的对象。常用的注入方式有3种构造注入、设值注入Setter注入和接口注入。 一个简单实例来加深对开闭原则、里氏代换原则和依赖倒转原则的理解 该系统经常需要将存储在TXT或Excel文件中的客户信息转存到数据库中因此需要进行数据格式转换。 在客户数据操作类中将调用数据格式转换类的方法实现格式转换和数据库插入操作初始设计方案结构如图 发现该设计方案存在一个非常严重的问题由于每次转换数据时数据来源不一定相同因此需要更换数据转换类如有时需要将TXTDataConvertor改为ExcelDataConvertor。此时需要修改CustomerDAO的源代码而且在引入并使用新的数据转换类时也不得不修改CustomerDAO的源代码系统扩展性较差违反了开闭原则。 由于CustomerDAO针对具体数据转换类编程因此在增加新的数据转换类或者更换数据转换类时都不得不修改CustomerDAO的源代码。可以通过引入抽象数据转换类解决该问题。在引入抽象数据转换类DataConvertor之后CustomerDAO针对抽象类DataConvertor编程。 更换具体数据转换类时无须修改源代码只需要修改配置文件如果需要增加新的具体数据转换类只要将新增数据转换类作为DataConvertor的子类并修改配置文件即可原有代码无须做任何修改满足开闭原则。重构后的结构如图 在大多数情况下这3个设计原则会同时出现开闭原则是目标里氏代换原则是基础依赖倒转原则是手段。 2.9 接口隔离原则 接口隔离原则Interface Segregation PrincipleISP使用多个专门的接口而不使用单一的总接口即客户端不应该依赖那些它不需要的接口。 根据接口隔离原则当一个接口太大时需要将它分割成一些更细小的接口使用该接口的客户端仅需知道与之相关的方法即可。 1当把“接口”理解成一个类型所提供的所有方法特征的集合时这就是一种逻辑上的概念接口的划分将直接带来类型的划分。可以把接口理解成角色一个接口只能代表一个角色每个角色都有它特定的一个接口此时这个原则可以叫作“角色隔离原则”。 2如果把“接口”理解成狭义的特定语言的接口那么ISP表达的意思是指接口仅仅提供客户端需要的行为客户端不需要的行为则隐藏起来应当为客户端提供尽可能小的单独的接口而不要提供大的总接口。 实例针对某CRM系统的客户数据显示模块设计了如图2-17所示的CustomerDataDisplay接口。其中方法readData用于从文件中读取数据方法transformToXML用于将数据转换成XML格式方法createChart用于创建图表方法displayChart用于显示图表方法createReport用于创建文字报表方法displayReport用于显示文字报表。 由于在接口CustomerDataDisplay中定义了太多方法即该接口承担了太多职责。一方面导致该接口的实现类很庞大在不同的实现类中都不得不实现接口中定义的所有方法灵活性较差如果出现大量的空方法将导致系统中产生大量的无用代码影响代码质量另一方面由于客户端针对大接口编程将在一定程度上破坏程序的封装性客户端看到了不应该看到的方法没有为客户端定制接口 需要将该接口按照接口隔离原则和单一职责原则进行重构 2.10 合成复用原则 合成复用原则又称为组合聚合复用原则Composition/Aggregate Reuse PrincipleCARP。 合成复用原则Composite Reuse PrincipleCRP尽量使用对象组合而不是继承来达到复用的目的。 合成复用原则就是在一个新的对象里通过关联关系包括组合关系和聚合关系来使用一些已有的对象使之成为新对象的一部分新对象通过委派调用已有对象的方法达到复用功能的目的。简言之复用时要尽量使用组合聚合关系关联关系少用继承。 组合聚合可以使系统更加灵活降低类与类之间的耦合度一个类的变化对其他类造成的影响相对较少。其次才考虑继承在使用继承时需要严格遵循里氏代换原则有效使用继承会有助于对问题的理解降低复杂度而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度。 由于组合或聚合关系可以将已有的对象也可称为成员对象纳入新对象中使之成为新对象的一部分因此新对象可以调用已有对象的功能这样做可以使得成员对象的内部实现细节对于新对象不可见所以这种复用又称为“黑箱”复用。 一个简单实例 在初期的CRM系统设计中考虑到客户数量不多系统采用MySQL作为数据库与数据库操作有关的类如CustomerDAO类等都需要连接数据库连接数据库的方法getConnection封装在DBUtil类中。由于需要重用DBUtil类的getConnection方法设计人员将CustomerDAO作为DBUtil类的子类。 随着客户数量的增加系统决定升级为Oracle数据库因此需要增加一个新的OracleDBUtil类来连接Oracle数据库。由于在初始设计方案中CustomerDAO和DBUtil之间是继承关系因此在更换数据库连接方式时需要修改CustomerDAO类的源代码将CustomerDAO作为OracleDBUtil的子类这将违反开闭原则当然也可以修改DBUtil类的源代码同样会违反开闭原则。 根据合成复用原则在实现复用时应该多用关联少用继承。因此在本实例中可以使用关联复用来取代继承复用重构后的结构如图 CustomerDAO和DBUtil之间的关系由继承关系变为关联关系采用依赖注入的方式将DBUtil对象注入CustomerDAO中可以使用构造注入也可以使用设值注入。如果需要对DBUtil的功能进行扩展可以通过其子类来实现如通过子类OracleDBUtil来连接Oracle数据库。 2.11 迪米特法则 迪米特法则又称为最少知识原则Least Knowledge PrincipleLKP其定义如下迪米特法则Law of DemeterLoD一个软件实体应当尽可能少地与其他实体发生相互作用。 如果一个系统符合迪米特法则那么当其中某一个模块发生修改时就会尽量少地影响其他模块扩展会相对容易。这是对软件实体之间通信的限制。迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度使类与类之间保持松散的耦合关系。 迪米特法则还有几种定义形式不要和“陌生人”说话只与你的直接朋友通信等。 对于一个对象其“朋友”包括以下几类1当前对象本身this。2以参数形式传入到当前对象方法中的对象。3当前对象的成员对象。4如果当前对象的成员对象是一个集合那么集合中的元素也都是朋友。5当前对象所创建的对象。 一个简单实例来加深对迪米特法则的理解 CRM系统包含很多业务操作窗口。在这些窗口中某些界面控件之间存在复杂的交互关系一个控件事件的触发将导致多个其他界面控件产生响应。例如当一个按钮Button被单击时对应的列表框List、组合框ComboBox、文本框TextBox、文本标签Label等都将发生改变在初始设计方案中界面控件之间的交互关系可简化为如图2 现使用迪米特对其进行重构。在本实例中可以通过引入一个专门用于控制界面控件交互的中间类Mediator来降低界面控件之间的耦合度。引入中间类之后界面控件之间不再发生直接引用而是将请求先转发给中间类再由中间类来完成对其他控件的调用。
http://www.pierceye.com/news/984838/

相关文章:

  • 百度做的网站后台怎么更新网站要学什么
  • 做it人经常逛的网站国通快速建站
  • 网站标题会影响吗wordpress改域名修改哪里
  • 做音乐网站需要版权么工业设计图片产品
  • 外包网站问些什么问题浙江省信息港成绩查询
  • 手机网站怎么dw做官方网站下载打印机的驱动
  • 网站被攻击空间关了怎么办网站用的是什么语言
  • 欧亚专线快递查询商丘seo
  • 网站建设跟加入会员哪个效果好网站建设优化开发公司哪家好
  • 网站建设执行力wordpress php解密算法
  • 青岛网站设计皆挺青岛造价人员做兼职的网站
  • 潍坊cms建站系统wordpress 朴素
  • 网站建设方面的课程国外 图片网站
  • 网络哪里能接活做网站新浦网站制作网站建设
  • 新手自己做网站凡科网建设网站如何修改源代码
  • 做自媒体发视频用哪些网站贵州网站建设联系电话
  • 可以提供排版的网站友情链接怎么弄
  • 优秀网站建设空间海口 网站建设
  • 设计网站页面出现问题九江哪家网站建设公司好
  • 深圳做企业网站的公司成都公司展厅
  • 两学一做 网站t型布局网站怎么做
  • 论坛网站建设联系方式成都网站设计制作价格
  • 网页网站建设的ppt模板下载响应式网站项目
  • 做网站在哪里可以找到高清壁纸北京响应式网站
  • 企业网站建设门户网站建设费的摊销年限
  • 模板网站的域名是什么网站源代码程序
  • 网站空间多久续一次费长春网站制作设计
  • 网站制作价格低广西网络电视
  • 平台网站建设收费烟台网站的优化
  • 如何做提卡网站vue.js wordpress