设计模式

 1, 策略模式

有很多实现同一功能的算法, 都可以一个个封装起来, 可以方便的替换.

比如选磁盘, 可以随机选, 可以循环, 可以根据磁盘剩余空间选...

class Algorithm
{
public:
    virtual int PickDisk() = 0;
};
class RandomAlgorithm : public Algorithm
{
public :
    int PickDisk() {return rand();}
};
class FreespaceAlgorithm : public Algorithm
{
public:
    int PickDisk() {return max_free_space();}
};

class DiskManager
{
public:
    DiskManager()
    {
        m_Algorithm = new RandomAlgorithm ;
    }
    int PickDisk() {return m_Algorithm->PickDisk();}

private:
   Algorithm* m_Algorithm;
}

// sample
DiskManager manager;
manager.PickDisk();

 

上面的sample 有个不方便的地方就是不能很方便的使用其它种算法, 改进

enum AlgorithmType 
{
    RANDOM = 0,
    SPACE
};
class DiskManager 
{
public:
    DiskManager(AlgorithmType type) 
    { 
        if (type == RANDOM)
            m_Algorithm = new RandomAlgorithm;
        else if (type == SPACE)
            m_Algorithm = new FreespaceAlgorithm;
    } 
    int PickDisk() 
    {
        return m_Algorithm->PickDisk();
    }

private: 
    Algorithm* m_Algorithm; 
}

// sample 
DiskManager manager(RANDOM); 
manager.PickDisk();

 

2, 工厂模式

根据不同的需要生产/生成不同的产品/类. 其实上例sample2中的DiskManager 的constructor 就是一个简单工厂

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值