面向对象四个好处:可维护,可扩展,可复用和灵活性好
1.简单工厂模式
2.策略模式
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
3.单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。
4.开放-封闭原则
是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。
面对需求,对程序的改动是通过新代码进行的,而不是更改现有的代码。
5.依赖倒转原则
好比PC电脑理解成是个大的软件系统,任何部件如CPU,内存,硬盘,显卡等都可以理解为程序中封装的类或程序集,由于PC易插拔的方式,那么不管哪一个出问题,都可以在不影响别的部件的前提下进行修改或替换。
PC电脑里叫易插拔,面向对象里叫强内聚,松耦合。
电脑里的CPU全世界就是那么几家生产,大家都在用,但却不知道Intel,AMD等公司是如何做出这个精密的小东西的,CPU的强内聚的确是强,但它又肚子成为了产品,在千千万万的电脑主板上插上就可以使用。
这是因为CPU的对外都是针脚式或触点式等标准的接口,这就是接口的最大好处,CPU只需要把接口定义好,内部再复杂我也不让外部知道,而主板只需要预留与CPU针脚的插槽就可以了。
依赖倒转原则:A抽象不应该依赖细节,细节应该依赖与抽象。也就是说针对接口编程,不要对实现编程。B高层模块不应该依赖底层模块,两个都应该依赖抽象。
依赖倒转其实就是谁也不要依赖谁,除了约定的接口,大家都可以灵活自如。
里氏代换原则:子类型必须能够替换掉它们的父类型。
在面向对象里,企鹅类不能继承与鸟类,因为鸟会飞,而企鹅不会飞。
只要当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
6.装饰模式
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
装饰模式是为已有的功能动态的添加更多功能的一种方式,但到底要什么时候用它呢?
当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,但这种做法的问题在于,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要,而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,,因此,当需要执行特殊的行为时,客户代码就可以在运行时根据需要选择的,按顺序的使用装饰功能包装对象。
优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类,有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
装饰的顺序很重要,比如加密数据和过滤词汇都可以是数据持久化前的装饰功能,但若先加密了数据再用过滤功能就会出现问题了,最理想的情况,是保证装饰类之间彼此独立,这样它们就可以以任意的顺序进行组合了。
7.代理模式
对其他对象提供一种代理以控制对这个对象的访问。
远程代理:就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不用地址空间的事实。
虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
比如说你打开一个很大的HTML网页时,里面可能有很多文字和图片,但你还是可以很快打开它,此时你所看到的是所有的文字,但图片却是一张一张的下载后才能看到,那些未打开的图片框,就是通过虚拟代理来替代了真实的图片。
安全代理:用来控制真实对象访问时的权限。
智能指引:是指当调用真实对象时,代理处理另外一些事。
代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
代理就是真实对象的代表。
学习OO设计模式
最新推荐文章于 2025-04-24 10:22:16 发布