• 面向对象编程的深入理解


    面向对象编程就是把需要处理的逻辑对象,当做一个整体,把需要的参数配置赋值给对象,对象内部处理逻辑完全对客户端封闭。只暴露接口给客户端调用。

    ps: 有一个问题困惑了我很久,就是数据库的增删改查与业务逻辑的搞混,数据库增删改查应该与逻辑对象分开来,放到数据层。

    示例:

    需求: 有n种职业,每种职业的不同名称,不同的薪资

    新建person表

    CREATE TABLE person (
    	`id` INT(11) NOT NULL auto_increment,
    	`name` VARCHAR(20) NOT NULL COMMENT '姓名',
    	`job` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '1老师, 2程序员, 3司机',
    	PRIMARY KEY(`id`)
    ) ENGINE=INNODB CHARSET=utf8
    
    image-20211012161328201

    现在每个职业都有自己的职业名称,每个职业的工资算法都是不一样的,所以我们创建了三个类

    面向对象理解 (1)

    Person抽象类

    abstract class Person
    {
        protected $person;
    
        public function __construct(appcommonmodelPerson $person)
        {
            $this->person = $person;
        }
    
        abstract public function getJobName();
    
        abstract public function getSalary();
    
        public function getName() {
            return $this->person->name;
        }
    }
    

    老师职业

    class Teacher extends Person
    {
    
        public function getJobName()
        {
            return "老师";
        }
    
        public function getSalary()
        {
            return 400;
        }
    }
    

    司机职业

    class Diver extends Person
    {
    
        public function getJobName()
        {
            return "司机";
        }
    
        public function getSalary()
        {
            return 500;
        }
    }
    

    程序员职业

    class Programmer extends Person
    {
    
        public function getJobName()
        {
            return "程序员";
        }
    
        public function getSalary()
        {
            return 100;
        }
    }
    

    客户端调用

    
    class Index
    {
        public function index($id)
        {
            $person = Person::get($id);
            switch ($person->job){
                case 1:
                    $people = new Teacher($person);
                    break;
                case 2:
                    $people = new Diver($person);
                    break;
                case 3:
                    $people = new Programmer($person);
            }
            return $people->getName(). "是". $people->getJobName(). ' 工资是'.$people->getSalary().'每个月';
        }
    }
    

    这样处理在增加职业的时候,我们只需要新增职业类和修改调用客户端就可以了,符合开放封闭原则。

  • 相关阅读:
    JS截取文件后缀名
    百度地图API示例:使用vue添加删除覆盖物
    AttributeError: module 'tensorflow' has no attribute 'sub'
    ModuleNotFoundError: No module named 'numpy.core._multiarray_umath' ImportError: numpy.core.multiarray failed to import
    千锋很火的SpringBoot实战开发教程视频
    sublime text3 3176 注册码 License
    linux后台运行jar程序
    使用eclipse的SVN连接码云
    关于git上传文件的一个小问题
    js正则表达式,密码长度要大于6位,由数字和字母组成
  • 原文地址:https://www.cnblogs.com/echoou/p/15405426.html
Copyright © 2020-2023  润新知