学习设计模式(1)

2017-03-11  本文已影响0人  僚机KK

一个UML类图

uml_class_struct.jpg

类之间的关系

泛化关系(generalization)
实现关系(realize)
聚合关系(aggregation)
组合关系(composition)
关联关系(association)
依赖关系(dependency)

时序图

创建型模式

简单工厂模式( Simple Factory Pattern )

1. 模式动机

考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。

2. 模式定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

3. 模式结构
4. 代码
#include "Factory.h"
#include "ConcreteProductA.h"
#include "ConcreteProductB.h"
Product* Factory::createProduct(string proname){
    if ( "A" == proname )
    {
        return new ConcreteProductA();
    }
    else if("B" == proname)
    {
        return new ConcreteProductB();
    }
    return  NULL;
}
5. 模式分析
6. 简单工厂模式的优点
7. 简单工厂模式的缺点
8. 适用环境
9. 模式的应用
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale
locale);
10.总结

工厂方法模式(Factory Method Pattern)

1. 模式动机
2. 模式定义
3.模式结构
3. 代码
 #include "ConcreteFactory.h"
 #include "ConcreteProduct.h"
 Product* ConcreteFactory::factoryMethod(){
    return  new ConcreteProduct();
}
#include "Factory.h"
#include "ConcreteFactory.h"
#include "Product.h"
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    Factory * fc = new ConcreteFactory();
    Product * prod = fc->factoryMethod();
    prod->use();
    
    delete fc;
    delete prod;
    
    return 0;
}
4.模式分析
5. 模式实例
loger.jpg
6. 工厂模式的优点
7.工厂模式的缺点
8.适用环境
9.模式的扩展
10.总结
上一篇下一篇

猜你喜欢

热点阅读