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

晋城中英文网站建设河南企起网站建设

晋城中英文网站建设,河南企起网站建设,设备外观设计效果图,linux网站建设技术指南 pdf在匆忙之际理清消除实现继续和面向接口编程这样两个大题目可不是一件轻易的事情#xff0c;尤其考虑到自身的熟悉水平。坦白的说#xff0c;这又是一篇“炒冷饭”的文章#xff0c;但这“冷饭”又确实不好炒。因此#xff0c;在阅读了这篇文章之后#xff0c;你可要批判地…在匆忙之际理清消除实现继续和面向接口编程这样两个大题目可不是一件轻易的事情尤其考虑到自身的熟悉水平。坦白的说这又是一篇“炒冷饭”的文章但这“冷饭”又确实不好炒。因此在阅读了这篇文章之后你可要批判地接受(拒尽)我的观点尽管我的观点也是来自于别人的观点。继续是面向对象中很重要的概念。假如考虑到Java语言特性继续分为两种接口继续和实现继续。这只是技术层面的题目即便C中不存在接口的概念但它的虚基类实际上也相当于接口。对于OO的初学者来说他们很希看自己的程序中出现大量的继续由于这样看起来很OO。但滥用继续会带来很多题目尽管有时候我们又不得不使用继续解决题目。相比于接口继续实现继续的题目要更多它会带来更多的耦合题目。但接口继续也是有题目的这是继续本身的题目。实现继续的很多题目出于其自身实现上因此这里重点讨论实现继续的题目。举个例子(这个例子实在太老套了)。我要实现一个Stack类我想当然地选择Stack类继续于ArrayList类(你也可以以为我很想OO些或者出于本性的懒惰);现在又有了新的需求需要实现一个线程安全的Stack我又定义了一个ConcurrentStack类继续于Stack并覆盖了Stack中的部分代码。由于Stack继续于ArrayListStack不得不对外暴露出ArrayList所有的public方法即便其中的某些方法对它可能是不需要的;甚至更糟的是可能其中的某些方法能改变Stack的状态而Stack对这些改变并不知情这就会造成Stack的逻辑错误。假如我要在ArrayList中添加新的方法这个方法就有可能在逻辑上破坏它的派生类Stack、ConcurrentStack。因此在基类(父类)添加方法(修改代码)时必须检查这些修改是否会对派生类产生影响;假如产生影响的话就不得不对派生类做进一步的修改。假如类的继续体系不是一个人完成的或者是修改别人的代码的情况下很可能由于继续产生难以觉察的BUG。题目还是有的。我们有时会见到这样的基类它的一些方法只是抛出异常这意味着假如派生类支持这个方法就重写它否则就如父类一样抛出异常表明其不支持这个方法的调用。我们也能见到它的一个变种父类的方法是抽象的但不是所有的子类都支持这个方法不支持的方法就以抛出异常的方式表明态度。这种做法是很不友好和很不安全的它们只能在运行时被“侥幸捕捉”而很多漏网的异常方法可能会在某一天忽然出现让人不知所措。引起上面题目的很重要的原因便是基类和派生类之间的耦合。往往只是对基类做了小小的改动却不得不重构它们的所有的派生类这就是臭名昭著的“脆弱的基类”题目。由于类之间的关系是存在的因此耦合是不可避免的甚至是必要的。但在做OO设计时当碰到如基类和派生类之间的强耦合关系我们就要思量思量是否一定需要继续呢?是否会有其他的更优雅的替换方案呢?假如一定要学究的话你会在很多书中会看到这样的原则假如两个类之间是IS-A关系那么就使用继续;假如两个类之间是Has-A的关系那么就使用委派。很多时候这条原则是适用的但IS-A并不能做为使用继续的尽对理由。有时为了消除耦合带来的题目使用委派等方法会更好地封装实现细节。继续有时会对外及向下暴露太多的信息在GOF的设计模式中有很多模式的目的就是为了消除继续。关于何时采用继续一个重要的原则是确定方法是否能够共享。比如DAO 可以将通用的CRUD 方法定在一个抽象DAO中具体的DAO 都派生自这个抽象类。严格的说抽象DAO 和派生的DAO 实现并不具有IS -A关系我们只是为了避免重复的方法定义和实现而作出了这一技术上的选择。可以说使用接口还是抽象类的原则是假如多个派生类的方法内容没有共同的地方就用接口作为抽象;假如多个派生类的方法含有共同的地方就用抽象类作为抽象。当这一原则不适用于接口继续假如出现接口继续就会相应地有实现继续(基类更多的是抽象类)。现在说说面向接口编程。在众多的灵敏方法中面向接口编程总是被大师们反复的夸大。面向接口编程实际上是面向抽象编程将抽象概念和具体实现相隔离。这一原则使得我们拥有了更高层次的抽象模型在面对不断变更的需求时只要抽象模型做的好修改代码就要轻易的多。但面向接口编程不意味着非得一个接口对应一个类过多的不必要的接口也可能带来更多的工作量和维护上的困难。相比于继续OO中多态的概念要更重要。一个接口可以对应多个实现类对于声明为接口类型的方法参数、类的字段它们要比实现类更易于扩展、稳定这也是多态的优点。假如我以实现类作为方法参数定义了一个方法voiddoSomething(ArrayList list)但假如领导哪天觉得ArrayList不如LinkedList更好用我将不得不将方法重构为void doSomething(LinkedListlist)相应地要在所有调用此方法的地方修改参数类型(很遗憾地我连对象创建也是采用ArrayList list newArrayList()方式这将大大增加我的修改工作量)。假如领导又觉得用list存储数据不如set好的话我将再一次重构方法但这一次我变聪明了我将方法定义为voiddoSomething(Set set)创建对象的方式改为Set set newHashSet()。但这样仍不够假如领导又要求将set改回list怎么办?所以我应该将方法重构为voiddoSomething(Collection collection)Collection的抽象程度最高更易于替换具体的实现类。即便需要List或者Set固有的特性我也可以做向下类型转换解决题目尽管这样做并不安全。面向接口编程最重要的价值在于隐躲实现将抽象的实现细节封装起来而不对外开放封装这对于Java EE中的分层设计和框架设计尤其重要。但即便在编程时使用了接口我们也需要将接口和实现对应起来这就引出如何创建对象的题目。在创建型设计模式中单例、工厂方法(模板方法)、抽象工厂等模式都是很好的解决办法。现在流行的控制反转(也叫依靠注进)模式是以声明的方式将抽象与实现连接起来这既减少了单调的工厂类也更易于单元测试。做个总结吧。尽管我竭力批驳继续的不好鼓吹接口的好但这并不是尽对的。滥用继续、滥用接口都会带来题目。做JavaEE开发的很多朋友抱怨DAO、Service中一个接口一个类的实现方式尽管它们似乎看起来已成为业界的最佳实践之一。也许排除掉接口会使程序更“瘦”一些但“瘦”并一定就“好”需要根据项目的具体情况而定。关于继续和接口的最佳实践各位看官还是需要自身的经验积累和总结了。
http://www.zqtcl.cn/news/287004/

相关文章:

  • 光明楼网站建设九一人才网赣州招聘官网
  • 如何做网站监控wordpress修改文章点赞数
  • 佛山高端网站建设报价网站的建设属于无形资产
  • 永川网站设计wordpress+用户前台
  • 晋城客运东站网站开发公司装修通知告示怎么写
  • 北京做手机网站的公司哪家好完整的网站开发
  • 建立网站的内容规划长沙网络推广哪家
  • 网站建设及优化教程百度网站优化排名
  • 医院网站推广渠道网站关键词排名不稳定
  • 类网站建设陕西省建设资格注册中心网站
  • 网站横幅图片网页设计怎么创建站点
  • 网站建设页面设计图片开个送快餐网站怎么做
  • 北京免费网站建设模板下载南江县建设局网站
  • 温岭手机网站建设义乌市网站建设
  • 西安网站制作费用哪家装修公司比较好的
  • 硅谷网站开发薪酬wordpress热门吗
  • 红酒营销型网站建设天一建设网站
  • 做网站建设公司哪家好安徽省住房建设部官方网站
  • 网站被黑咋样的柳州正规网站制作公司哪家好
  • 莱芜网站开发代理四川网络推广服务
  • 应该知道的网站网站全网建设莱芜
  • 北京网站页设计制作广州专业网站改版
  • 重庆网站建设建站收费免费外链网盘
  • 做加盟代理的网站比较好的网页网站设计
  • 兴义网站开发企业标准备案平台官网
  • 蓝彩网络科技_齐齐哈尔微信营销_齐齐哈尔网站建设会员卡管理系统哪里买
  • 织梦门户网站做大后建个人免费网站用哪个
  • 深圳市建设管理中心西安官网seo
  • 网站开发工作方案自己做的网站怎么维护
  • 潍坊建设部门管理网站做网站如何接单