OO设计的主要目的,在于分割责任,将每个模块的责任降低到合理的程度,并对各个模块进行封装以及降低两个模块之间的耦合度,达到修改一处不影响另外一处的目的。
这个原则其实并不仅仅局限于OO设计,只是OO设计提供了更好的支持。
OO设计的要求:
达到不变更现有代码,仅通过继承以及多态的方式改变系统的行为。这种设计的优势在于通过派生实现的改变系统行为的方式对原有代码行为不产生任何影响,降低由于增加或改变功能之后引入新的问题的可能性。 核心部分设计思路整理 Facade模式CodecManager的作用类似于Facade
Facade原本的作用是为了给多个不同的包提供一个统一的接口,即使这些不同的包的调用方式不同。
简单工厂、工厂方法、抽象工厂的比较
下一步的工作 考虑到VDM、VDO语句都有一组多句的情况,实现以下内容 首先,当一组中的总语句数量大于1时,要能够在codec中保存当前语句,而不是马上解析(因为不完整)其次,每次收到总语句数量大于1的消息时,检查缓存中是否有同组的语句,并检查同组的语句是否足够总语句数量,如果达到总语句数量,解析,并向Observer返回结果,否则保存至缓存建立一个定时器,定时检查缓存内容 如果缓存中一个语句组中的语句超过一定阀值时间尚未达到总语句数量,则 如果第一句语句存在,则解析从第一句开始的所有连续编号语句的内容如果第一句不存在,抛弃该语句组不解设计模式的不同侧重
侧重总体架构的设计模式,如MVC(Java web开发),MVVM(WPF)侧重细节架构的设计模式,如GoF所描述的23种设计模式侧重实现的模式,如生产消费队列的同步问题等等OO设计的主要目的在于封装
对直接的使用者来说,应该成为一个黑盒子,只要给定输入,就能够获取期望的输出对于期望修改行为的使用者来说,应该不需要关注过多的内部实现,更不需要改动内部的代码来达到修改软件行为的目的实际的做法其实多种多样,核心的设计,在于控制反转(Inversion of Control,或IoC) 代码例子中的GenericFactory仅仅是一个简单的例子可以借助其它的IoC库实现类似的效果,比如Spring Flyweight模式 在编程中,有时会发现创建了大量的同类的对象对象的创建在Java中是比较耗时的,同时这些对象的回收也会占用较多的资源 Java中的对象都是创建在heap上的,这种创建方式决定了内存的分配会比stack上更加耗时Java的垃圾回收机制,会使得整个程序的执行停顿,过于频繁的垃圾回收会对整个程序的响应速度造成严重的影响 尽管在设计及开发中前期阶段,过多的考虑性能优化的方式并不实际也没有必要,但是在设计时的一些考虑还是可以比较有效的提高程序的运行速度Flyweight(拳击术语,蝇量级)就是尽量重复利用已经创建的对象GenericFactory中,将创建的对象进行缓存的方式就是Flyweight模式这种模式的使用条件是,对同一个对象的复用不会影响处理结果 具体的来说,处理GGA、GLL、RMC语句时,对应的Codec是无状态的,因此使用Flyweight模式不会影响处理结果对VDM、VDO、ABM、BBM语句来说,因为每个消息都可能有多个语句组成,因此这四种Codec是有状态的,对这四种Codec使用Flyweight模式需要考虑是否合适 Command模式 它尝试以物件来代表实际行动。命令物件可以把行动(action) 及其参数封装起来,于是这些行动可以被: 重复多次取消取消后重做 Command模式的主要意义在于: 将复杂的操作分解,简化了每一个操作的功能,达到了解耦的目的通过将多个command组合,可以实现复杂的操作,实现command的复用能够支持command的取消以及重做 Command模式是软件设计中常用的设计模式本项目中,利用command模式将各个NMEA语句的解析分离