Boolan C++设计模式第二周心得笔记

本周主要讲了工厂方法、抽象工厂、原型模式、构建器、门面模式、代理模式、适配器和中介者。

工厂方法

Boolan C++设计模式第二周心得笔记_第1张图片
Boolan C++设计模式第二周心得笔记_第2张图片
Boolan C++设计模式第二周心得笔记_第3张图片
Boolan C++设计模式第二周心得笔记_第4张图片

抽象工厂

Boolan C++设计模式第二周心得笔记_第5张图片
Boolan C++设计模式第二周心得笔记_第6张图片
Boolan C++设计模式第二周心得笔记_第7张图片
Boolan C++设计模式第二周心得笔记_第8张图片

原型模式

Boolan C++设计模式第二周心得笔记_第9张图片
Boolan C++设计模式第二周心得笔记_第10张图片
Boolan C++设计模式第二周心得笔记_第11张图片
Boolan C++设计模式第二周心得笔记_第12张图片

构建器

Boolan C++设计模式第二周心得笔记_第13张图片
Boolan C++设计模式第二周心得笔记_第14张图片
Boolan C++设计模式第二周心得笔记_第15张图片
Boolan C++设计模式第二周心得笔记_第16张图片

门面模式

Boolan C++设计模式第二周心得笔记_第17张图片
Boolan C++设计模式第二周心得笔记_第18张图片
Boolan C++设计模式第二周心得笔记_第19张图片
Boolan C++设计模式第二周心得笔记_第20张图片
Boolan C++设计模式第二周心得笔记_第21张图片

中介者

Boolan C++设计模式第二周心得笔记_第22张图片
Boolan C++设计模式第二周心得笔记_第23张图片
Boolan C++设计模式第二周心得笔记_第24张图片
Boolan C++设计模式第二周心得笔记_第25张图片

代理模式

Boolan C++设计模式第二周心得笔记_第26张图片
Boolan C++设计模式第二周心得笔记_第27张图片
Boolan C++设计模式第二周心得笔记_第28张图片
Boolan C++设计模式第二周心得笔记_第29张图片

适配器

Boolan C++设计模式第二周心得笔记_第30张图片
Boolan C++设计模式第二周心得笔记_第31张图片
Boolan C++设计模式第二周心得笔记_第32张图片
Boolan C++设计模式第二周心得笔记_第33张图片

本周作业

针对DrawingSystem中的基类Shape和各个子类Line、Rec、Circle。为支持更多的形状子类,请使用某种模式来支持灵活地创建它们。使用松耦合面向对象设计方法和思想,可使用伪码表示设计。

复习本周所讲的设计模式,初步将目标锁定在了工厂和抽象工厂上。

那么这两者有什么区别呢?

工厂方法与抽象工厂的区别

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类
本题中,各个子类之间并没有说明之间有相互依赖的关系,故最终决定采用工厂方法模式。

根据上述思路,完了以下几段代码:

抽象的shape

class Shape
{
public:
    Shape(int no = 0) :no_(){}
    virtual ~Shape(){}
    int GetNo(){ return no_; }
    int SetNo(int no_){}

private:
    int no_;
};

ShapeFactory

class ShapeFactory
{
public:
    ShapeFactory();
    virtual Shape * CreateShape() = 0;
    virtual ~ShapeFactory(){}
};

具体的子类

//具体类
class Line : public Shape
{
public:
    Line(){}
    virtual ~Line(){}
};

class Rec : public Shape
{
public:
    Rec(){}
    virtual ~Rec(){}

};

class Circle : public Shape
{
public:
    Circle(){}
    virtual ~Circle(){}
};

工厂

//具体工厂
class LineFactory : public ShapeFactory
{
public:
    LineFactory();
    virtual ~LineFactory();
    virtual Shape* CreateShape()
    {
        return new Line();
    }
};

class RecFactory : public ShapeFactory
{
public:
    RecFactory();
    virtual ~RecFactory();
    virtual Shape* CreateShape()
    {
        return new Rec();
    }
};

class CircleFactory : public ShapeFactory
{
public:
    CircleFactory();
    virtual ~CircleFactory();
    virtual Shape* CreateShape()
    {
        return new Circle();
    }
};

总结

  1. 工厂模式用于隔离对象的使用者和具体类型之间的耦合关系。(红色字体部分)
  2. 工厂模式通过面向对象的方法,将所要创建的具体对象延迟到子类,从而实现一种扩展(而非更改)的策略,较好的解决了这种紧耦合的关系
  3. 工厂模式解决单个对象的需求变化,缺点在于要求创建的方法和参数相同

你可能感兴趣的:(Boolan C++设计模式第二周心得笔记)