设计模式_03 六大设计原则(含 C++代码)

本文详细介绍了软件设计中的六大原则:开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则和合成复用原则。这些原则旨在提高代码的可扩展性和可维护性,降低模块间的耦合度,提升软件设计质量。通过实例展示了如何在实际编程中应用这些原则。

3 六大设计原则

3.1 开闭原则

对扩展开放,对修改关闭
通过接口和抽象类来实现。
代码实现:

class Abstract_father {
public:
	virtual void func() = 0;
};

class son1 : Abstract_father {
public:
	void func() {
		cout << "son1" << endl;
	}
};

3.2 里氏代换原则

任何基类可以出现的地方,子类一定可以出现。
子类可以扩展父类的功能,但不能改变父类原有的功能(尽量不要重写父类的方法)。运用多态非常频繁时,程序出错的概率很大。

3.3 依赖倒转原则

高层模块不应该依赖于低层类。
两者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。对抽象进行编程

3.4 接口隔离原则

客户端不应该被迫依赖于它不使用 的方法。
一个类对另一个类的依赖应该建立在最小的接口上。
原始案例:

class Abstract_father {
public:
	virtual void func1() = 0;
	virtual void func2() = 0;
};

class son1 : Abstract_father {
public:
	void func1() {
		cout << "son1" << endl;
	}
	void func2() {} //不需要使用的方法
};

改进案例:

class Abstract_father {
public:
	virtual void func1() = 0;
};

class Abstract_Mother {
public:
	virtual void func2() = 0;
};

class son1 : Abstract_father {
public:
	void func1() {
		cout << "son1" << endl;
	}
};

3.5 迪米特法则

如果两个软件实体无需直接通信,那么就不应该发生直接的相互调用,可以通过第三方(中介)转发该调用。

class house_searcher {
public:
	string searcherName() {
		string name = "searcher";
		return name;
	}
};

class house_host {
public:
	string hostName() {
		string name = "host";
		return name;
	}
};

//不直接通信,而是通过中介建立联系
class agent {
private:
	house_searcher searcher;
	house_host host;
public:
	void getName() {
		cout << searcher.searcherName() << ' ' << host.hostName() << endl;
	}
};

3.6 合成复用原则

尽量先使用组合或者聚合等关系来实现,齐次再考虑继承关系。
类的复用分为继承复用合成复用

继承复用缺点:
1.继承关系破坏了父类的封装特性。子类可以对父类方法进行重写。
2.子类和父类耦合度高。父类进行修改,子类需要相应进行修改。
3.限制了复用的灵活性。在运行时继承关系不可被修改。

合成复用的优点:
1.维持了类的封装性。
2.对象间的耦合度低。
3.复用的灵活性高。新对象可以动态引用与成员对象类型相同的对象。

继承复用代码:

class Car {
public:
	virtual void show() {
		cout << "car" << endl;
	}
};

class electricCar : Car {
public:
	virtual void show() {
		cout << "electriCar" << endl;
	}
};

class whiteElectricCar : electricCar {
public:
	virtual void show() {
		cout << "whiteElectricCar" << endl;
	}
};

class redElectricCar : electricCar {
public:
	virtual void show() {
		cout << "redElectricCar" << endl;
	}
};

合成复用代码:

class Color {
public:
	void show() {
		cout << "red ";
	}
};

class Car {
protected:
	Color color;
public:
	virtual void show() {
		Car::color.show();
		cout << "Car" << endl;
	}
};

class electricCar : Car {
public:
	virtual void show() {
		Car::color.show();
		cout << "electriCar" << endl;
	}
};

retur 设计模式概述;

返回设计模式概述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值