童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

设计模式之设计六大原则

11月7日 鬼神氏投稿
  1。单一职责原则(SRP)
  定义:就一个类而言,应该仅有一个引起它变化的原因。
  从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到破坏。
  比如我经常看到一些Android开发在Activity中写Bean文件,网络数据处理,如果有列表的话Adapter也写在Activity中,问他们为什么除了好找也没啥理由了,把他们拆分到其他类岂不是更好找,如果Activity过于臃肿行数过多,显然不是好事,如果我们要修改Bean文件,网络处理和Adapter都需要上这个Activity来修改,就会导致引起这个Activity变化的原因太多,我们在版本维护时也会比较头疼。也就严重违背了定义“就一个类而言,应该仅有一个引起它变化的原因”。
  当然如果想争论的话,这个模式是可以引起很多争论的,但请记住一点,你写代码不只是为了你也是为了其他人。
  2。开放封闭原则(ASD)
  定义:类、模块、函数等等等应该是可以拓展的,但是不可修改。
  开放封闭有两个含义,一个是对于拓展是开放的,另一个是对于修改是封闭的。对于开发来说需求肯定是要变化的,但是新需求一来,我们就要把类重新改一遍这显然是令人头疼的,所以我们设计程序时面对需求的改变要尽可能的保证相对的稳定,尽量用新代码实现拓展来修改需求,而不是通过修改原有的代码来实现。
  假设我们要实现一个列表,一开始只有查询的功能,如果产品又要增加添加功能,过几天又要增加删除功能,大多数人的做法是写个方法然后通过传入不同的值来控制方法来实现不同的功能,但是如果又要新增功能我们还得修改我们的方法。用开发封闭原则解决就是增加一个抽象的功能类,让增加和删除和查询的作为这个抽象功能类的子类,这样如果我们再添加功能,你会发现我们不需要修改原有的类,只需要添加一个功能类的子类实现功能类的方法就可以了。
  3。里氏替换原则(LSP)
  定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象
  里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
  里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
  在使用里氏代换原则时需要注意如下几个问题:
  子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。根据里氏代换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的声明,则无法在以父类定义的对象中使用该方法。
  我们在运用里氏代换原则时,尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏代换原则是开闭原则的具体实现手段之一。
  Java语言中,在编译阶段,Java编译器会检查一个程序是否符合里氏代换原则,这是一个与实现无关的、纯语法意义上的检查,但Java编译器的检查是有局限的。
  4。依赖倒置原则(DIP)
  定义:高层模块不应该依赖低层模块,两个都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
  在Java中,抽象就是指接口或者抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或者继承抽象类而产生的就是细节,也就是可以加上一个关键字new产生的对象。高层模块就是调用端,低层模块就是具体实现类。
  依赖倒置原则在Java中的表现就是:模块间通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生的。如果类与类直接依赖细节,那么就会直接耦合,那么当修改时,就会同时修改依赖者代码,这样限制了可扩展性。
  5。迪米特原则(LOD)
  定义:一个软件实体应当尽可能少地与其他实体发生相互作用。
  也称为最少知识原则。如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。
  迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。
  在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。
  6。接口隔离原则(ISP)
  定义:一个类对另一个类的依赖应该建立在最小的接口上。
  建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
  采用接口隔离原则对接口进行约束时,要注意以下几点:
  接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
  为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
  提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
  这六个原则,可以使我们在应用的迭代维护中更加方便、轻松的应对,让我们的软件更加灵活。在后续的文章中我会给大家介绍其他的设计模式
投诉 评论

文字社区的兴起就在前两天,继照片红包之后,张小龙的饭否日记刷屏了,大家争相深夜围观这位大师的情感流水日记,而这一头条正是来源于知乎一位专栏作家的文章。近期身边知乎粉越来越多,尤其是知乎总结了……全球十大在线旅游网站模式分析随着旅游行业日新月异的发展,在线旅游网站的出现推动了整个旅游业的互联网化。包括OTA、旅游搜索引擎在内的旅游网站数量众多,在激烈竞争和快速发展中,在线旅游行业出现了多个巨头,在……露腰的季节到了露腰装应该怎么穿随着气温的日益升高,又到小露蛮腰的季节了,露腰装怎么穿才好看呢?配长裤、短裙都不错呢,让你更加性感迷人。红白条纹上衣露肩又露腰,配同款半身裙和白色平底西,非常明艳吸睛,甜……未来可能出现破产潮的9大行业近日,一些行业内企业破产的传闻不断。去年来上演的光伏产业破产大戏已然让我们感到了经济寒流的威力。但接下来或许会有更多的行业卷入其中。已经出现苗头的行业包括造船业、钢铁业、……短视频竞争仍然激烈,UGC内容也迎来井喷移动互联网的快速发展,让我们的社交表达形式变得越来越多样化,文字、图片、语音、视频等交流方式不断兴起,尤其是各类短视频平台也不断涌现出来,诸如趣拍、美拍、秒拍、小咖秀等短视频A……支付战争:微信支付与支付宝钱包连接的4个战场首先参考一份Talkingdata的移动互联网应用排行的数据,以此来展开微信支付与支付宝的支付战争。借着微信红包、支付宝红包大战之际,一年来大家对这两家支付大咖的关注,不……设计模式之设计六大原则1。单一职责原则(SRP)定义:就一个类而言,应该仅有一个引起它变化的原因。从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担……微信公众号的流量真的越来越小了!这篇文章在取标题的时候还有这些选择:《干掉微信的会是今日头条们吗?》《微信的杀机》,或者是《10万又怎样,微信还有几年好日子?》。思前想后都觉得不妥,一方面是因为我对于微信这样……王兴:多数人为了逃避真正的思考愿意做任何事情王兴所创立的美团网是这一波O2O浪潮中的明星公司。去年10月,美团和大众点评宣布合并。2016年1月,新公司完成融资,融资金额超33亿美元,超过国内打车服务初创公司滴滴快的获得……【人人早报】第143期:婚恋网进军O2O,你会去嘛?早报导语世纪佳缘开始进入O2O模式,以后我们就可以在线上约好,线下约会了;微信支付大肆扩张下线硬件;阿里或投资家庭互联网项目;唯品会市值已超两个新浪;大家还是和小编一起来……P2P四强启示录:金融创业尚存三大机会如果要说2015年中国的互联网哪个领域发展最为迅猛,O2O和P2P可谓当之无愧。不过多少让人们感到惊讶的是,很多O2O平台动不动就号称自己用户过亿,而且这样的平台不在少数;与之……三个简单工具,帮助你收集并优化营销数据追逐救护车(Ambulancechasing)是最古老的销售诀窍之一。先把这种销售方式的坏名声放到一边,Ambulancechasing,其实意味着在物色潜在客户的时候,……
分析了二季度增粉最快的1000个抖音账号,我们发现了这些趋势每年年初,短视频创作者们都会格外关心一个问题:今年的短视频内容生态,风往哪吹?为了回答这个问题,卡思一直定期观察抖音每个月内增粉最快的20个账号,以期从他们的内容特性中挖……58篇10w熬夜推送!热搜爆了,吴亦凡凉了7月的最后一晚,“平安北京朝阳”官方微博一条“石破天惊”的发布,让吴亦凡再次爆上了热搜。截至目前,这条微博已经被转发了近80万次,点赞量高达1100万。而这个战线长……第二季度苹果iPad出货量1290万台超过三星和亚马逊总和站长之家(ChinaZ。com)8月2日消息:根据研究公司IDC分享的估计,苹果在2021年第二季度出货了1290万台iPad。相比之下,IDC估计三星和亚马逊在该季度的平板电……做裂变营销,最容易犯的6个错误各位村民好,我是村长。许多人做的营销活动,注定了是无效的!看起来花了很多时间做方案,做设计,感动了自己,但是活动中的问题倒是不少。村长工作到现在做的各种裂变活……吴亦凡被刑拘后,品牌该如何应对代言人“翻车”“吴亦凡被刑拘了!”昨晚22:30,平安北京朝阳发布了情况通报,其中提到“经警方调查,吴某凡(男,30岁,加拿大籍)因涉嫌强奸罪,目前已被朝阳公安分局依法刑事拘留,案件侦……生鲜电商大逃杀:一场注定亏损的尝试这场被“烧钱”过度催化的战役里,没有赢家多轮烧钱补贴之后,疯狂的“菜篮子”争夺战终于进入到了最后阶段。前有头部平台每日优鲜、叮咚买菜先后成功上市,后有食享会、同城生……小米将在今晚举行《小米直面会》雷军等多位高管将亮相站长之家(ChinaZ。com)8月2日消息:小米公司将在8月2日晚上20:00举行《小米直面会》直播栏目,在这一活动中将会有全新的小米产品发布、全新的技术升级和最新的小米动向……直播卖榴莲冲出销量困境,“水果大叔”在快手打通线上销路“大家放心买我家榴莲,质量绝对有保证。”7月的一天晚上,在“水果大叔”的直播间里,不少人正在下单抢榴莲,这是他今年在快手销量最好的水果品类之一。作为快手电商平台代表性的水果垂类……曝iPhone13系列产能提升20!转转:省钱买5G版iPh如无意外,今年9月苹果的新旗舰iPhone13系列(暂称)便将面世。供应链方面最近传出消息称,新iPhone已经进入量产阶段,且产能有望超过iPhone12系列。同一时间内,代……中商互联集团产业互联网新布局废旧之家平台独立上线据悉,废旧之家平台近期由中商114平台划分独立运营上线,中商114为中商互联集团旗下综合B2B平台,商品SKU达1。2亿,废旧行业独立运营布局可以说“野心巨大”,据了解废旧之家……天猫调整扰乱市场秩序实施细则8月5日生效站长之家(ChinaZ。com)8月2日消息:近日,天猫平台宣布,为了维护和营造公平竞争、平等交易的市场秩序,确保会员权益和平台的良好经营次序,将对扰乱市场秩序的规则与实施细则……苏宁易购,聚焦下的裂变三十而立的苏宁易购,以一种全新的姿态,再次整装待发。7月29日,苏宁易购发布公告称,苏宁易购新一届董事会产生,黄明端出任董事长,任峻出任总裁。在当日董事会上,进一步……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界