设计模式开篇(一)

来源:互联网 发布:js 掷骰子动画 编辑:程序博客网 时间:2024/04/29 03:28

已经有很多前辈写过关于设计模式的很多经典文章,我在这里记录一些自己的学习进程,表示自己还在学习好了。

先从借来的大话设计模式看起,今天是第一章和第二章。

第一章 简单uml 

uml中继承很容易记住。

说些不怎么好记住的,如 依赖 ,关联 ,聚合,组合 。

依赖用 虚线箭头表示,在代码上是类的方法用到(传入或引用)了 被依赖的类。

关联:有名的客户和订单的关系以及公司和员工的关系,都是关联关系。还有就是我和我的单车的例子,他们都是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,也可以使双向的。

public class Company{    private Employee employee;    public Employee GetEmployee()    {        return employee;    }    public void SetEmployee(Employee employee)    {        this.employee = employee;    }    //公司运作        public void Run()    {        employee.StartWorking();    }}


聚合

聚合(aggregation)是一种特殊的联系,它表明了“部分”到“整体”的关系,显著的特点就是不能包含循环的联系(就是说,部分中不能包含整体)。如:

uml-aac-diff-02.pngclass Node
{
private:
vector<Node*> itsNodes;
};

上述代码只有当子节点不会成为父节点的父节点时(即,必须是树结构,不能是图结构),才能称之为聚合。

组合

组合(composition)跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说, “部分”的生命期不能比“整体”还要长。例如:

uml-aac-diff-03.png

class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};

聚合组合区别:用C++程序的话,聚合就像是类中的指针成员,而组合就是类中的成员。需要该类来创建对象。//这里说的应该不是很准确

关联与依赖的区别:有说“关联本身即是一种依赖”,亦有说“依赖是一种弱关联”,其实说来说去是一档子事。依赖和关联都是说一个类用到了另一个类。其区别在于一个是使用,一个是拥有。

关联和聚合 的区别是: 聚合是一对多的。而关联貌似是一对一的。 关联只有一个类知道另外一个类的公共属性和操作。包含了另一个对象的引用。 而聚合则是拥有被聚合类的指针,要在非成员方法里面使用。

总结一下:

依赖、关联聚合组合、继承、实现 耦合度依次提高。

区分心法:

1.成员变量中没有B类,方法中使用,则为依赖。

2.成员变量中有B类的引用或指针,并不参与B对象的构建,则是关联。

3.成员变量中有B类的指针,方法中使用,则是聚合关系。

4.成员变量或构造函数中有B类的实现对象,则是组合。


第二章 工厂模式和策略模式

工厂模式用到的是依赖模式的关系。


而策略模式用到的是聚合模式。


        策 略模式是一种第一一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。并且继承类有助于定义一系列可供重复用的算法或行为。每个算法都有自己单独的类可以单独测试。

        与工厂结合可以简化客户端,将具体的实现转移到策略模式中。

原创粉丝点击