北京那个医院治疗白癜风啊 https://wapyyk.39.net/bj/zhuanke/89ac7.html这是我在头条上第一次写专业的高级的贴子,其实我内心是不太想写这么高级专业的帖子的,因为只有内行人能看懂,对于自媒体这种靠流量吸引眼球的媒体来说,太过专业的帖子点击率是极低的。不过若是本贴能帮助到一部分人,我还是很高兴的。若能得你支持,顺手点赞评论或者转发一下,就是对我最大的鼓励和支持了。声明:本文以桥接模式为例,但重点不是讲桥接模式,因为桥接模式网上很多,写得好的也很多,我没必要再去写一遍,所以针对桥接模式我只简要说一下,重点在于解读桥接模式如何使用设计原则,我想这个问题,可能不少程序员没有去这么想过吧?一、桥接模式的uml图如下:旁白,对于一个面向对象想要学的好的同学,uml图是必须过关的。到底怎么算过关呢,如果你看到一张图,能立即在你脑海中形成他的代码结构,就算是熟练了。能够达到这种熟练程序的uml程序员,已经不需要别人给出代码了,因为图即代码,代码即图。是不是难以理解这话?不要急,不理解的话,你可能还没有足够熟练,只需要勤加练习就行了。二、桥接模式的定义桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(HandleandBody)模式或接口(Interfce)模式。这个可能对不熟的朋友来说,难以理解。三、面向对象三大特性,五大原则三大特性是:封装,继承,多态五大原则是:单一职责原则,开放封闭原则,里式替换原则,依赖倒置原则,接口分离原则---------------全文重点开始----------------------------四、解读桥接模式如何使用设计原则1.封装从uml图中,我们可以看到,Abstraction是抽象类,Implementor是接口,他们都是抽象的,分别是RefinedAbstraction和ConcreteImplementorA和ConcreteImplementorB的上层抽象,因为我们就称Abstraction和Implementor用到了封装特性2.继承同样的,RefinedAbstraction是对Abstraction这个抽象类的子类,是具体实现,所以,我们说RefinedAbstraction继承了Abstraction,这就用到了继承特性。一样的,ConcreteImplementorA和B是Implementor接口的实现,在这里就是继承特性。3.多态ConcreteImplementorA的方法OperationImp()假设实现了业务,此时我们新增一个类ConcreteImplementorC,他继承ConcreteImplementorA,那么ConcreteImplementorC里面使用override关键字重写OperationImp()方法,这就是实际了多态特性4.单一原则uml图中的,每一个对象,他们都是只做一件事情的,比如Abstraction这个抽象基类只是负责定义基础抽象方法,其它的也是如此。所以我称他们是符合单一原则的。单一原则有个简单的比喻:就是我们手上永远只专注做一件事,绝不同时做两件事,这就叫单一。5.开闭原则开:就是可以扩展。比如Implementor这个抽象接口,里面已经定义了一个方法OperationImp,我们可以扩展,再加一个方法,或者再加N个方法。闭:就是修改关闭。比如OperationImp的具体实现ConcreteImplementorA,所业务逻辑写错了,出bug了。那么我们可以关起门了,神不知鬼不觉的修改掉这个bug。但客户仍然还是调用方法OperationImp,客户没有感知,他都不知道我们其实已经修改好这个bug了。这就叫修改关闭,关起门了,不告诉你我在修改这个错误。你看到的永远是和谐。6.里氏替换子类可以代替父类出现在任何地方。比如现在有个方法:publicvoidMethod(Implementorimp){}这个方法依赖了Implementor这个抽象接口。我们在任何地方需要调用这个方法的时候,可以把ConcreteImplementorA或B,做为Implementor参数传到这个方法中。这就叫里氏替换7.依赖倒置原则还以上面的方法为例:publicvoidMethod(Implementorimp){}实际上也可以写成:publicvoidMethod(ConcreteImplementorAimp){}或者publicvoidMethod(ConcreteImplementorBimp){}但ConcreteImplementorA和B是具体的实体,他限制了你必须传ConcreteImplementorA和B,限制了依赖这个A或B。如果我想要传C,你发现传不了。但是Method(Implementorimp)的话,不管你传A,B还是C,都可以作为参数传进去。这就叫依赖倒置。8.接口分离原则我们在做接口的时候,比如现在有个接口:Implementor我们可以在里面定义吃、喝、拉、撒,4个抽象方法。然后我们还可以在里面定义上班、下班、打卡、午睡,4个抽象方法。但你发现了吗?吃喝拉撒跟工作(上班下班等)放在同一个接口定义Implementor里面,是不是很奇怪?所以,我们可以把Implementor拆分2个接口:ImplementorLife,ImplementorWork,然后Implementor继承这2个。我想你明白了,这差不多就等于是分类存放在不同的接口定义里。这就叫接口分离原则。希望我的解读能够帮助还没有掌握面向对象编程思想的同学们更进一步。最后,希望看到的人,能够随手帮我点赞评论或者转发一下,不枉我花了这么长时间折腾。感谢。
转载请注明:http://www.0431gb208.com/sjslczl/6518.html