设计原则:
- 最大可能的解耦
- 少用集成,多用组合
- 针对接口编程,而非实现
- 找出程序中会变化的方面,然后将其和固定不变的方面安相分离
- 不易改变,但易于扩展;
- 依赖倒置原则,依赖抽象abs, 不要依赖具体INSTANCE的类:不能让高层组价依赖底层组件,而且不管高层或者底层,两者都应该依赖于抽象;避免依赖具体类型,尽量依赖抽象;
设计模式六大原则:
http://www.uml.org.cn/sjms/201211023.asp#4
设计模式六大原则:
- 开闭原则:对扩展开放,对修改关闭,尽量不要去修改原有的功能定义,个人认为也是良好拓展性, 向前兼容性的需要。
- 单一职责原则:初始定义为类单一职责,但一般难以实现,但在接口和方法的层面上,应该尽量做到职责明确,逻辑清晰,尽量做到望文知意;
- 里氏替换原则:简单来说使用父类的地方,都可以使用子类来替换;
- 依赖倒置原则:上层模块不应该依赖底层模块,它们都应该依赖于抽象;
- 接口隔离原则:依赖建立在最小接口上,理论上不要包含不必要的接口;
- 迪米特法则:降低类之间的耦合度,提高模块的相对独立性
目前看来所谓模式,就是针对对象的一系列操作方式的套路,OO设计
2016年9月26日
策略模式:使用封装组合建立关系。
专业解释:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
使用:定义父类接口,不同的子类分别实现父类;在客户处使用父类接口对象调用方法,既是多多态的基本使用,父类引用指向子类类型。
2016年9月27日
观察者模式:简单来说就是实现观察者接口的对象传递给主题,经由主题保存管理并在数据变化的时候判定是否通知订阅者,然后可以调用方法
2016年9月28日
装饰者模式:一层层的往上包装((((((0)))))))
特征(实现):包装类都拥有最内部的超类;继承不是为了功能,而是为了使用多态的特性;
应该划分包装类、被包装类两种,但是两者是继承一个超类(为了使用多态)包装类构造方法中保存被包装类向上转型的引用,然后可以调用抽象方法;
常见的装饰者模式:java。io
2016年10月7日08:31:31
工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。(依赖倒置原则)
真正的工厂是对象的实例化放在子类中进行,只定义一个抽象方法。
抽象工厂模式:创建一个抽象接口使用组合的一些列声明;由衍生具体的类来完成一些列create,
两者差别:工厂方法源于集成
所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。
2016年10月9日09:00:32
单实例模式:这篇相对量比较少,内容也简单易理解
1.静态变量持有实例化对象引用 2.静态公有方法接口供外部调用。3.私有构造器。
2016年10月17日
命令者模式:
通过中间命令对象进行 命令者和调用者之间的命令;实现解耦合
2016年10月18日
适配者模式:(对象适配模式,类适配模式(需要多继承所以在Java中无法使用))
很形象的讲就是电源转换器;
本质作用就是转换接口,adapter需要B对象,在adapter中实现A接口 然后通过引用的B对象执行方法对接;
2016年10月20日
外观模式:适配者模式为转换接口,外观模式为统一接口,简化接口
一次(封装)定义接口,使用最少知识原则,减少不必要的对象接触;
2016年10月20日
模板方法模式:
定义一个抽象类 ,提供一个入口方法,然后对内部抽象方法进行有序的调用;
思考:有序调用,同步任务有先后,但是每个方法执行的进度是否会绝对按照
方法的调用?对于线程的理解。
回顾与策略模式的差别:策略模式是使用(接口)对象调用不同的方法 准确说是接口封装的算法族。
而模板方法更侧重的是在超类中定义一个算法逻辑以及相应的抽象方法,由子类具体实现内部;
另外工厂模式是一种特殊的模板方法模式;
2016年10月25日08:23:52
迭代器与组合模式:
迭代器模式:对不同的数据结构类型数据进行统一接口转换包装,然后供客户使用;有点像适配模式
2016年11月1日
组合模式:
树形结构,组合之中有方法,有组合。叶节点,子节点同样的操作;
2016年11月9日08:37:35
状态模式:(比较和策略模式的差别)
状态模式更多的是通过对象多态去实现 类似机关的机制;而策略模式更多是利用多个对象组合不同效果;
2016年11月15日
代理模式: rim 通信
构造中间对象完成代理事件,多种情况的代理,解决 安全,体积大,权限等问题
大方向上:
静态代理:
在项目未运行前 。class文件已经存在
动态代理:
在项目运行时根据传入的参数,加载具体需要的代理对象
网友评论