C++之设计模式原则

设计模式原则:
(1)开放封闭原则:类的改动是通过增加代码完成,而不是修改代码
#include <iostream>

using namespce std;

class BankWorker
{
	public:
	virtual void show() = 0;       //预留一个接口,用于其他类继承并实现功能
};

class GetMoney : public BankWorker
{
	public:
	void show()
	{
		cout << "GetMoney !" << endl;
	}
};	


class SaveMoney : public BankWorker
{
	public:
	void show()
	{
		cout << "SaveMoney !" << endl;
	}
};

//此时若需增加功能,则增加子类继承于基类,无需修改已有代码
class TransformMoney : public BankWorker
{
	public:
	void show()
	{
		cout << "TransformMoney !" << endl;
	}
};

int main()
{
	BankWorker *b = new SaveMoney;//定义指针对象
	b->show();
	delete b;     //及时释放
	
	b = new GetMoney;
	b->show();
	delete b;
	
	b = new TransformMoney;
	b->show();
	delete	b;
	
	return 0;
}

(2)依赖倒置原则:依赖于抽象(接口),不要依赖于具体的实现(类),也就是针对接口编程
#include <iostream>

using namespace std;

class CPU
{
    public:
        virtual void cpu_work() = 0;
};

class InterCPU : public CPU
{
    public:
        void cpu_work()
        {
            cout << "cpu_work !" << endl;
        }
};

class HardDisk
{
    public:
        virtual void harddisk_work() = 0;
};

class AHardDisk : public HardDisk
{
    public:
        void harddisk_work()
        {
            cout << "harddisk_work !" << endl;
        }
};

class Computer
{
    private:
        CPU *m_cpu;
        HardDisk * m_harddisk;
    public:
        Computer(CPU *cpu,HardDisk *harddisk)    //构造函数初始化
        {
            m_cpu = cpu;
            m_harddisk = harddisk;
        }
        void show()
        {
            m_cpu->cpu_work();         //多态
            m_harddisk->harddisk_work();
        }
};
int main()
{
    CPU *cpu = new InterCPU;             //修改时可修改此处接口
    HardDisk * harddisk = new AHardDisk;

    Computer *c = new Computer(cpu,harddisk);
    c->show();

    delete c;
    delete cpu;
    delete harddisk;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值