首页 > 技术文章 > 设计模式

joeat1 2019-08-14 20:35 原文

# 开发设计【阅读,《Head First 设计模式》】


> http://wickedlysmart.com/headfirstdesignpatterns/code.html

分类是为了更抽象地思考和组合东西,也是为了更好总结和分析,同时在交流中有了一个公共的词汇,方便交流意见;也使得在一个小范围内比较和搜索,简化问题的维度

对象创建 方法行为 关系结构

原则:
封装变化属性
少用继承,多用组合
针对组合接口(未实现的函数方法)编程,不针对具体实现(包含具体的类,在创建具体类时被绑定)编程
为交互对象实现松耦合的设计
多拓展开放,对修改关闭(属性和细节隔离)

模式:
观察者模式(松耦合,建立一对多的依赖) 主题 与 订阅者

装饰者模式(利用装饰类包装原始类,实现类的修改和扩展,在实际运行和需求中拓展属性和内容)--- 主体 加 配料 【考虑类型问题,多层装饰的嵌套问题】
行为可以被拓展,装饰者类型与装饰的组件 类型一样

工厂模式(将变化的部分,具体类与对象实现的部分,提取出来,放在一个模块或函数中;用户可不考虑具体实现直接调用,而实现由子类完成)
此中可能涉及多个类的平行交互关系,封装过程就是将具体的实现推移到具体子类,而子类中直接加入其他具体子类的实例,达到交互内容
创建对象的代码几种放在一个对象或者方法中

单件模式(只实例化一个对象,用于管理共享资源等,构造函数是私有的,利用静态函数【类方法】来调用构造函数实例化,且有全局访问点)
在多线程时,考虑加锁与同步

适配器模式(将一个类的接口转换成另一个)

外观模式(提供系统统一的公共接口,使之可以直接访问子系统的内容)

状态模式(有限状态机实现具体状态转换)

代理模式(利用java中的RMI,实现不同端的通信或虚拟一个对象代理控制原对象,实现代理过滤一些访问)

不同类型需要有树状关系,可以统一两者到一个公共类

系统维护,拓展,分析

      ---不变的(是一个)
     |
     |
抽象对象 -- 属性 --- -- 属性获取与修改 setattr 与 getattr
|                  |
|                  |
方法     ---   可变的(有一个)
(如行为) <---- 接口 ---> 多态实现


对象封装,利用接口进行拓展,并建立接口使之功能被其他对象利用【对象之间的独立的,相互不了解具体实现,相互依赖降低,提高代码弹性】

事件监听lisen --- 事件信号signal --- 事件响应respond
|                                                                               |
具体观察者实现观察 具体主题类对接口进行具体实现

# 项目分解
项目要求 --- 项目数据 --- 用户操作
 |                       |                       |
 |                       |                       |
V                     V                      V
实现模块 --- 数据获取 --- 用户界面


** 具体问题 ---> 类 与 方法 --- 具体描述
** 适用场合
** 建立类图(明确几个类以及其属性,建立各个类之间的关系,各个接口的) ---> 预估可能的效果
** 具体实现 --- 规范代码编写
** 输入输出
** 类似参考

推荐阅读