设计模式的六大原则是什么
原创
设计模式的六大原则
设计模式是软件工程中的一种常用方法,可以帮助我们解决软件开发过程中的问题。设计模式遵循以下六大原则:
1. 单一职责原则
单一职责原则指的是一个类或者模块应该只负责一项功能,并且这项功能应该被完整地封装在一个类或模块中。这样做的目的是为了降低系统的纷乱性,尽也许降低损耗可维护性。
class SingleResponsibility {
public function calculateArea($radius) {
return pi() * $radius * $radius;
}
}
2. 开放封闭原则
开放封闭原则指的是软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着我们在设计时要考虑到软件的变化,使其能够容易地进行扩展,而不是通过修改现有代码来实现。
abstract class Animal {
abstract public function makeSound();
}
class Dog extends Animal {
public function makeSound() {
return "汪汪汪";
}
}
class Cat extends Animal {
public function makeSound() {
return "喵喵喵";
}
}
3. 里氏替换原则
里氏替换原则指的是在软件中,如果存在一个能够用基类对象的地方,那么一定可以用派生类对象来替换,而不影响程序的正确性。
class BaseClass {
public function method() {
return "BaseClass method";
}
}
class DerivedClass extends BaseClass {
public function method() {
return "DerivedClass method";
}
}
function clientCode(BaseClass $obj) {
echo $obj->method();
}
$client = new DerivedClass();
clientCode($client); // 输出:"DerivedClass method"
4. 接口隔离原则
接口隔离原则指的是客户端不应该依赖性那些它不需要的接口。将接口分解为更小的、功能单一的接口,可以尽也许降低损耗接口的复用性,并降低系统的纷乱性。
interface IWorker {
public function work();
}
interface IManager {
public function manage();
}
class Worker implements IWorker {
public function work() {
echo "Worker is working.";
}
}
class Manager implements IManager {
public function manage() {
echo "Manager is managing.";
}
}
5. 依赖性倒置原则
依赖性倒置原则指的是高层模块不应该依赖性低层模块,它们都应该依赖性于抽象。抽象不应该依赖性于具体实现,具体实现应该依赖性于抽象。这样做可以降低模块间的耦合,尽也许降低损耗系统的灵活性。
interface IDatabase {
public function query($sql);
}
class MySQL implements IDatabase {
public function query($sql) {
// MySQL 查询实现
}
}
class Oracle implements IDatabase {
public function query($sql) {
// Oracle 查询实现
}
}
class User {
private $db;
public function __construct(IDatabase $db) {
$this->db = $db;
}
public function find($id) {
return $this->db->query("SELECT * FROM users WHERE id = " . $id);
}
}
6. 迪米特法则
迪米特法则(最少知识原则)指的是一个对象应当对其他对象有尽也许少的了解。这样做的目的是为了降低对象之间的耦合,尽也许降低损耗系统的可维护性和可读性。
class Teacher {
public function assignHomework(Student $student) {
$student->doHomework("完成课后作业");
}
}
class Student {
public function doHomework($homework) {
echo "Student is doing " . $homework;
}
}
$teacher = new Teacher();
$student = new Student();
$teacher->assignHomework($student); // 输出:"Student is doing 完成课后作业"