面向对象设计原则

一、SRP:单一职责原则

SRP即Single Responsibility Principle,指的是每个类都应该只有一个单一的职责。类的职责应该尽量简单明了,如果一个类承担的职责过多会影响代码的封装性、可读性和可维护性。

例如,一个员工类需要完成打印工资条和计算员工绩效这两个职责,可以将这两个职责拆分为两个类:打印工资条类和员工绩效类。这样可以降低类的复杂度,增加类的可复用性和灵活性。

class PrintSalary {
    public void print() {
        // 打印工资条
    }
}

class EmployeePerformance {
     public double calculatePerformance() {
         // 计算员工绩效
     }
}

二、OCP:开闭原则

OCP即Open-Closed Principle,指的是系统中的类、模块、函数等应该对扩展开放,对修改关闭。其实就是要求我们尽量使用继承、接口等方式,尽量不去修改原有的代码。

例如,现在有一个手机类,支持发短信、打电话、拍照等功能。那么为了实现新增功能,可以通过继承来实现,不用修改原手机类中的代码。

class MobilePhone {
    public void call() {
        // 打电话
    }
    public void sendSMS() {
        // 发短信
    }
    public void takePhoto() {
       // 拍照
    }
}
class NewMobilePhone extends MobilePhone {
    public void playGame() {
        // 手机新增玩游戏功能
    }
}

三、LSP:里氏替换原则

LSP即Liskov Substitution Principle,指的是子类可以替换其父类在任何场景下,程序的行为都应该保持不变。也就是说,在程序中使用基类对象的地方,如果用子类对象代替,程序的行为不应该受到影响。

例如,现在有一个鸟类的基类,其中有一个叫声的方法。那么替换成子类乌鸦时,在运行时也应该输出“哇哇”这个叫声。

class Bird {
    public void cry() {
        // 鸟的叫声
        System.out.println("叽叽喳喳");
    }
}
class Crow extends Bird {
    public void cry() {
        // 乌鸦的叫声
        System.out.println("哇哇");
    }
}

四、ISP:接口隔离原则

ISP即Interface Segregation Principle,指的是客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。

例如,现在有一个动物类,但是其中有一些不是所有动物都有的方法,如羊有毛而鱼没有,但是Animal中却有毛的方法。所以需要在类中设计接口,减少无用的接口。

interface Animal {
    void eat();
}
interface Swim {
    void swim();
}
interface Wool {
    void wool();
}
class Sheep implements Animal, Wool {
    public void eat() {
        System.out.println("羊吃草");
    }
    public void wool() {
        System.out.println("羊有毛");
    }
}
class Fish implements Animal, Swim {
    public void eat() {
        System.out.println("鱼吃水草");
    }
    public void swim() {
        System.out.println("鱼会游泳");
    }
}

五、DIP:依赖倒置原则

DIP即Dependency Inversion Principle,指的是高层模块不应该依赖低层模块,而是应该通过抽象来进行依赖。

例如,现在有一个学生类和成绩类,如果对学生进行操作,就需要依赖成绩类。那么我们就可以通过接口或抽象类等方式进行依赖。

interface IScore {
    public void setScore(Student stu);
}
class Student {
    private String name;
    public Student(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
class Score implements IScore {
    public void setScore(Student stu) {
        System.out.println(stu.getName() + "的成绩是90分");
    }
}
class StudentManager {
    private IScore score;
    public StudentManager(IScore score) {
        this.score = score;
    }
    public void setScore(Student stu) {
        score.setScore(stu);
    }
}

原创文章,作者:YJZK,如若转载,请注明出处:https://www.506064.com/n/136427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
YJZKYJZK
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • 面向对象编程、类和对象

    面向对象编程(Object-Oriented Programming, OOP)是一种编程方法,它将现实世界中的事物抽象为对象(Object),对象的属性和方法被封装成类(Clas…

    编程 2025-04-29
  • 使用面向对象程序设计方法改写猜数字游戏Python程序

    本文将从以下多个方面对猜数字游戏程序功能要求,使用面向对象程序设计方法改写该程序Python做详细的阐述。 一、游戏规则 1、游戏开始时,程序随机生成一个 1 到 100 之间的整…

    编程 2025-04-28
  • JavaSlice——一种基于面向对象语言的轻量级Web框架

    一、简介 JavaSlice是一种基于面向对象语言的轻量级Web框架。它采用了MVC设计模式,能够快速开发、构建、测试和部署Web应用程序。JavaSlice基于Java语言开发,…

    编程 2025-04-23
  • GDPR隐私保护七大原则

    自2018年5月25日起,欧洲联盟(EU)在GPDR的指引下,强制所有企业和组织换取用户的数据授权。在GDPR的制度下,用户可以更好的掌握和保护自己的个人隐私,而且企业需要承担更多…

    编程 2025-04-23
  • 面向对象的四个基本特征

    一、封装性 封装性是指将对象的属性和方法封装在一起,对外界隐藏对象的细节,使得对象对使用者来说更加简单易用和安全可靠。 例如,我们可以创建一个类Car来表示汽车,在类中定义汽车的属…

    编程 2025-04-23
  • 面向对象的三大特性

    一、封装性 封装是面向对象的核心思想之一,指将数据与对其进行操作的方法(或称为函数)封装在一起,成为一个“类”(Class)。通过封装,可以达到隐藏数据、保护数据、使代码易于理解和…

    编程 2025-04-13
  • 合成复用原则

    一、原则概述 合成复用原则(Composition/Aggregation Reuse Principle)是指使用组合或聚合关系来代替继承,达到复用的目的,它要求尽量使用合成/聚…

    编程 2025-04-12
  • 依赖倒转原则详解

    一、什么是依赖倒转原则 依赖倒转原则(Dependency Inversion Principle,DIP)是SOLID原则中的一条,它是指依赖关系中高层模块不应该依赖于底层模块,…

    编程 2025-04-12
  • 面向过程与面向对象的对比分析

    一、面向过程与面向对象的基本概念 面向过程和面向对象是两种不同的程序设计方法,面向过程是一种以执行过程为中心进行设计和编写的程序设计方法,它主要强调把数据和函数分开处理,利用流程控…

    编程 2025-04-12
  • Luaclass—— Lua面向对象编程的终结者

    一、为什么需要Luaclass 在Lua中原生的面向对象编程方法是比较有限的,它缺乏常见的面向对象编程语言特性,例如类、继承、多态、私有属性和方法和访问器方法。这导致许多开发者必须…

    编程 2025-04-12

发表回复

登录后才能评论