从0开始学PHP面向对象内容之常用设计模式(总结——不要为了设计而设计)

从0开始学PHP面向对象内容之常用设计模式(总结——不要为了设计而设计)_第1张图片

一、引言

Hello every one 好久不见,最近有点懒惰,就没跟上趟更新,今天的这篇文章主要是做个关于php面向对象中的设计模式做个总结,当然还有很多设计模式没有讲到,这个就靠自己去探索了。

二、个人感觉

就我个人感觉而言,在我的编程生涯中,很少用到设计模式,因为我就是个curd业务的代码搬运工,基于PHP
的框架。很多设计模式都融于框架之中,你开箱即用就可,不用大费周章的去研究设计,当然如果你有需要的话可以进行使用。

三、过度设计

1、使用设计模式而非解决实际问题

使用设计模式而非解决实际问题,仅仅为了使用某种设计模式,而不是针对实际问题需求。例如,为一个简单功能引入抽象工厂或策略模式

示例:实现一个系统,用于创建两种用户对象:普通用户(User)和管理员(Admin)。
过度设计:



// 抽象工厂
interface UserFactory {
    public function createUser($name);
}

// 普通用户工厂
class UserFactoryImpl implements UserFactory {
    public function createUser($name) {
        return new User($name);
    }
}

// 管理员工厂
class AdminFactoryImpl implements UserFactory {
    public function createUser($name) {
        return new Admin($name);
    }
}

// 使用工厂创建对象
$userFactory = new UserFactoryImpl();
$adminFactory = new AdminFactoryImpl();

$user = $userFactory->createUser("John Doe");
$admin = $adminFactory->createUser("Jane Doe");

echo $user->getName(); // 输出: John Doe
echo $admin->getName(); // 输出: Jane Doe

你觉得咱们就是简单的创建两种用户而已,你这又是抽象工厂,然后管理员工厂,普通用户工厂,这不是增加代码复杂度和开发时间成本嘛,像这样的功能大可不必用设计模式

简单示例



class CreateUser{
    protected $name;
	protected $typeMsg;
    public function __construct($name,$type) {
        $this->name = $name;
        if($type=='admin'){//检测标识是否是创建管理员
    		$this->typeMsg='管理员'
    	}
    	if($type=='user'){
    	 	$this->typeMsg= '普通用户';//默认普通用户
    	}
    }
    public function getName() {
        return $this->typeMsg.$this->name;
    }
}
$user= new CreateUser("John Doe",'admin')
echo $user->getName()
$user= new CreateUser("John Doe",'user')
echo $user->getName()

输出
在这里插入图片描述

2、造成后果

1、代码量提升:增加了不必要的接口 UserFactory 和具体实现类
UserFactoryImpl、AdminFactoryImpl,使得代码冗长。
2、可扩展性假象:工厂模式是为了应对复杂的对象创建场景,而当前需求中的 User 和 Admin
的创建逻辑几乎没有复杂性。即便以后新增类型,简单地定义新类即可,工厂的引入并未带来实际好处。
3、增加维护成本:新增用户类型时,必须新增一个对应的工厂类,增加了代码维护的负担。

四、总结 :不要为了设计设计

这只是个简单的例子,咱们一定要根据业务要求去进行开发,在实际的开发工作中,项目的需求,时间都不是固定的,不要为了设计而去设计。

你可能感兴趣的:(#,从头开始学PHP之面向对象,php,设计模式)