zoukankan      html  css  js  c++  java
  • 面向对象编程的深入理解

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

    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().'每个月';
        }
    }
    

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

  • 相关阅读:
    Android——ListView学习笔记(一)
    记录笔记——关于request.getRequestDispatcher().forward(request, response)的跳转问题
    Python + openCV 实现图像垂直投影和水平投影
    2020年-第三周助教总结-第二组
    Python记录——字符串的常用方法
    2020年-第二周助教总结-第二组
    Android开发——三种活动跳转方式
    2020年-第一周助教总结-第二组
    Python —— 实例化ndarray对象
    海信聚好看矫恒浩:构建异地双活混合云,利用公共云应对流量突增
  • 原文地址:https://www.cnblogs.com/echoou/p/15405426.html
Copyright © 2011-2022 走看看