/*********************************创建型模式*********************************************/
如何创建或使用类(二者只居其一)
工厂模式、抽象工厂模式和建造者模式都涉及到设计用于创建目标对象的类;
单例模式、原型模式涉及到目标对象的改造。
@@如何创建对象?-----如何定义变量?有的时候要涉及类的重构。
---------------------------------------
单例模式:只需要创建一个对象
工厂模式:创建一种对象
抽象工厂模式:在一处创建相关对象
建造者模式:创建经相同步骤,但每步骤内容又不同的一类对象
原型模式:创建一系列只有细微差别的同类对象。
/******************************结构模式****************************************************************/
如何协调类B与类A之间的关系?
@@定义几个类?----要重构吗?拆和添
@@解决是否要建立新的类,重用以前的类问题(继承并不是一个好方法),如何减少类过多的问题。
----------------------------------------
适配器模式Adaptor:(已有2个类,加了一个类)在两个类之间加一个类,使等A类不经修改使用B类
桥接模式Bridge:(拆成2个类)在A组类和B组类之间加一个类C,或将C类吸收到A类,使得A组类和B组类组合出更多的类。(AB之间组合类太多了)
组合模式Composite(调整2个类):实现树形结构时,将叶子类A设计成没有节点的节点类B ,化不同为同!(m,n==>a,A)
装饰器模式Decorato(已有1个类):通过B类给A类添加新特色而不用从A组类产生新的类-->使A类对象为B类新对象的成员!(a=>A(a))
外观模式Facade(已有2组类,加了一个类):A类和B组类交互,改为A类和C类,C类与B组类交互,简化关系(委托人?),A为一组效果更好(这成代理模式?)。(1-N==>1-1-N)
享元模式Flyweight:A类共性太多,拆成两个两部分,变化少的和变化多的(10==>{1,9})
代理模式Proxy(已有2个类,加了一个类):若B类要使用A类,则A类必须修改,添加C类,B类通过C类访问A类(代购?)(1-1==>1-A-1)
/***************************************行为模式**************************************************/
调用者如何找到执行者,执行者在哪?调用者和执行者如何设计?
协调调用者B类和执行者A类之间的关系---如何设计类
@@类的结构是什么样的?-一般涉及到类的结构设计
@@如何避免过多的if-else
@@数据有了,谁来处理它?如何找到接盘侠?
------------------------------------------------------
责任链模式:A类带着后续执行者(需要一系列的执行者),执行者中带着下一个可能的执行者(硬编难改!)
命令模式:将执行的操作作为一个整体(对象){函数指针很像},调用者和执行者之间不宜打死结!
解释器模式:处理复杂,建立脚本,脚本如何解释?如何设计解释器(编译器)(不熟悉很正常)
迭代器模式:一般对象都是将数据与数据处理相结合,这是将数据与数据的遍历相分离(识实务)--原则是原则,最关键的原则是要解决问题!
中介者模式:有点像外观模式,多个类之间交互,加一个中介。(N<->N==》N<->1<->N)
备忘录模式:实现undo(),保存一个曾经的状态
观察者模式(订阅模式,模型视图模式):被观察者更新,观察者也更新,联动==>MVC
状态模式:多状态转换,状态机,状态与执行者绑定!
策略模式:策略或算法分装,按需
模板方法模式:子类继承
访问者模式:同一组数据让不同的对象处理,对处理对象抽出来