到最后还是还是回到了设计模式的学习上面了,之前一直在看一些c++的技术书,主要是关于语法等方面的用法,一直没关心代码的组织,最近开始看了设计模式,也是一些简单的见解,毕竟自己还没做过大项目,呵呵,自己把自己理解的写下来,方便以后查阅。
下面是设计模式的分类,主要分为三大类。
一是创建型模式,主要是负责对象的创建。
二是结构型模式,负责类之间的相互组织。
三是行为型模式,更关心算法和对象间任务分配,以及相互通信。
(理解的不太全面)
创建型模式主要包括:Factory(工厂),AbstractFactory(抽象工厂),Singleton(单例),Builder(建造),Prototype(原型)。
结构型模式则分为:Bridge(桥接),Adapter(适配器),Decorator(装饰),Composite(组合),Flyweight(享元),Facade(外观),Proxy(代理)。
行为型模式为:Template(模板),Strategy(策略),State(状态),Observer(观察),Memento(备忘录),Mediator(中介),Command(命令),Vistor(访问者),Chain of Responsibility(职责链),Iterator(迭代器),Interpreter(解释器)。
当然,他们都是思想,所以当我学习的时候,是抱着学习思想的态度去进行学习的,当然思路想明白了,代码架子也就能搭建出来了。
复习之前先回忆下UML类图
类图关系一般常用的分为四种,关联,依赖,组合/聚合,泛化(继承)。
1.关联
双向关联:
class C1
{
public:
C2* theC2;
};
class C2
{
public:
C1* theC1;
};
单向关联:
Class C3
{
Public:
C4* theC4;
};
Class C4
{};
自身关联:
Class C14
{
Public:
C14* theC14;
}
2.组合/聚合
聚合:C10可以脱离C9独立存在(某个领域,可以看下下面的组合部分)
Class C9
{
Public:
C10 theC10;
};
Class C10
{};
组合:说明C8是C7不可脱离的一部分,例如:鸟类中的翅膀是鸟的一本分,当前领域离开了鸟单独存在,就没有意义了,当然在其他领域,如各类翅膀中,它又有意义,所以是相对的。
Class C7
{
Public:
C8 theC8;
};
Class C8
{}
3.依赖
依赖:C5可能用到C6的一些方法。
#include “C6.h”
Class C5
{
Public:
Void Func(C6* theC6);
};
4.泛化(继承)
继承:(都懂的)
#include “C11.h”
Class C12 : public C11
{};
另外还有个模板
Template<int>
Class C13
{};
下面则是设计中的几个重要的原则:
一切的原则都是追求高内聚和低耦合。。。
单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。
开放-封闭原则:软件实体(类,模块,函数)应该可以扩展,但不可修改。
依赖倒转原则:高层模块不应该依赖低层模块,两个都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。
里氏代换原则(LSP):子类型必须能够替换掉它们的父类型。
迪米特法则(LoD):如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
今天到了这里,明天开始写工厂模式。