设计模式其实就是在针对开发中存在的问题,去设计的解决方案,当然这些解决方案也经过很多人的实践通过了别人的认可的。
设计模式可以使项目的结构变的清晰,也好维护。设计模式其实就是用来解决问题的。
设计模式的原则其实就是去构建可复用和可维护代码,设计模式的几个基本原则下面也简单的介绍下。
1、开闭原则就是一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现一个扩展和变化。其实就是一个理想化的过程就是对扩展开放,对修改关闭。举个例子就比如说我们有一个类有一个功能,我们想在这个功能上再去做一个功能就不要去修改那个方法了,我们可以再创建一个类去继承它写出那个方法。
2、里氏替换原则就是在父类可以出现的地方,子类也可以出现,这就要求我们不能随便的去重写,也就是说子类可以扩展父类的功能,但不能改变父类原有的功能。
里氏替换的四大原则
1、子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
2、子类中可以增加自己特有的方法。
3、当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4、当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
因为其实在日常开发中我们有的时候虽然使用直接继承父类,然后去重写父类的方法以实现自己想要的功能虽然快捷但是这很有可能会让程序出错。
再举个例子也搜集了下 其实继承在给程序设计带来巨大便利的同时,也带来了弊端。就好比使用继承会给程序带来侵入性,只要继承了父类就拥有了父类的所有属性和方法;程序的可移植性降低,增加了对象间的耦合性,如果一个类被其他的类所继承,则当这个类的常量、变量和方法被修改需要修改时,必须考虑到所有的子类,并且父类修改后,涉及到子类中的功能都有可能会产生错误。
3、依赖倒转原则
1、高层模块不应该依赖低层模块,两者都应该依赖其抽象;
2、抽象不应该依赖细节;
3、细节应该依赖抽象。
也就是
模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
接口或抽象类不依赖于实现类;
实现类依赖接口或抽象类 举个例子就比如有一个抽象类,我们创建了一个继承了这个抽象类的类实现了抽象方法,比如说这个抽象方法就是可以去监听按钮的点击的,那么监听按钮的点击的方法在抽象类里面肯定是没有的,但是我们在自己创建的类中实现了那个按钮一点下去所触发的方法,这其实就是说高级模块依赖与抽象类,但是可以在自己的模块内去写自己私有的方法。
4、接口隔离原则
也就是仅仅需要提供客户端需要的接口,其实就是客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上,就比如说你有一个抽象类里面有很多接口,也就是说防止一个抽象类中汇总了很多的抽象方法,而要分开来其实就是一个接口的隔离。根据我们的需求去实现该实现的方法,不去实现其他方法,其实就是接口隔离原则。
5、合成/聚合复用原则
就是尽量使用对象组合,而不是继承来达到复用的目的。这样可以降低类与类之间的耦合度,就比如说可以把一个对象放到另外一个对象中,然后去扩展出方法
6、最少知识原则
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用,如果类相互的依赖多了之后修改维护起来也会很麻烦
7、单一职责原则
不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责,如果一个类中有多项职责很有可能改动一个功能导致其他功能也会有问题。就比如说我们从网络解析下来解析数据的时候字典转模型,这个模型类负责那一块的数据其实就可以这么理解
参考链接:https://www.cnblogs.com/ajunForNet/p/4227921.html
http://blog.youkuaiyun.com/zhengzhb/article/details/7281833
http://blog.youkuaiyun.com/zhengzhb/article/details/7289269
https://www.cnblogs.com/cbf4life/archive/2009/12/15/1624435.html
http://blog.youkuaiyun.com/liaoqianchuan00/article/details/8230459
http://blog.youkuaiyun.com/ithzhang/article/details/7561657
http://blog.youkuaiyun.com/zhengzhb/article/details/7278174/
http://blog.youkuaiyun.com/hfreeman2008/article/details/52304172
https://www.cnblogs.com/muzongyan/archive/2010/08/03/1791466.html