【项目实战典型案例】18.开门小例子理解面向对象

简介: 【项目实战典型案例】18.开门小例子理解面向对象

一:背景介绍

业务场景:

米老师来壹佰八楼,需要进入办公室的门,这时需要一个开门的人

业务分析:

根据业务场景,抽象出了四个类:发消息人类、接收信息人类、业务封装类、客户端

二:实现思路

1、面向过程:

何老师告诉米老师要是在哪儿,然后米老师到壹佰之后去拿上钥匙开门

2、面向对象(抽象、封装、继承、多态)

何老师管钥匙开门,这个前提米老师是知道的。当米老师到壹佰之后喊一声何老师打开水麒麟的门,何老师听到消息之后就过来开门了

3、面向对象(抽象、封装、继承、多态、反射)

有多个老师管钥匙开门,这个前提米老师是知道的。当米老师到壹佰之后喊一声任意一个老师打开水麒麟的门,被喊到的那个老师听到消息之后就过来开门了

三:实现过程

1、面向过程:

代码编写

public class Client {
    public static void main(String[] args) {
        System.out.println("我是米老师,我需要开门");
        System.out.println("好的,米老师,我马上给您开门");
    }
}

实现效果

2、面向对象(抽象、封装、消息监听、事件和委托)

面向对象的基础是抽象,我们以开门小例子中为例:可以抽象出四个类,分别是:发消息人类、接收消息人类、业务封装类、客户端类 ,那么我们看看这四个类是如何实现开门小例子的吧~!

建模

共有两种建模方式:

  1. 米老师依赖何老师
  2. 何老师依赖米老师

我们以第二种建模方式为例:

代码编写

发消息人类

发消息类中只需有一个发消息的方法

public class sendMessager {
    public void sendMessage(){
        System.out.println("我是米老师:我需要开门");
    }
}

接收信息人类

接收信息类中有一个私有的开门方法,还有一个公有的接收信息方法,因为是接收信息人类依赖发消息人类,所以把teacherMi当作参数传给了receiveMessage(sendMessager techerMi),然后使用teacherMi调用teacherMi自己的发消息方法sendMessage()

public class receiveMessager {
    private void openDoor(){
        System.out.println("我是何老师:我来开门了");
    }
    public void receiveMessage(sendMessager teacherMi){
        teacherMi.sendMessage();
        this.openDoor();
    }
}

业务封装类

写了一个私有的business()方法,进行封装。实例化了接收消息人类,让接收信息人调用自己的接收信息方法receiveMessage(),然后把发送信息人类当作参数传入receiveMessage(new sendMessager())。

接着在写一个公有的notice()方法,来调用已经封装好的business()方法,供其他类使用

public class Notice {
    private void business(){
        receiveMessager teacherHe = new receiveMessager();
        teacherHe.receiveMessage(new sendMessager());
    }
    public void notice(){
        this.business();
    }
}

客户端类

在main()方法里实例化了业务封装类Notice类,然后使用实例化好的notice来调用自己暴露在外的notice()方法

public class Client {
    public static void main(String[] args) {
        Notice notice = new Notice();
        notice.notice();
    }
}

实现效果

3、面向对象(抽象、封装、消息监听、反射)

代码编写

发送消息人类

public class SendMessager {
    public void sendMessage(String className,String methodName) throws Exception{
        System.out.println("米老师发消息======");
        //通过反射获取对象和方法
        Class classObj = Class.forName(className);
        Object teacherHe = classObj.newInstance();
        Method methodObj = classObj.getMethod(methodName);
        methodObj.invoke(teacherHe,null);
    }
}

接收消息人类

public class ReceiveMessager {
    private void openDoor(){
        System.out.println("接收消息的人:好的,已开门");
    }
    public void receiveMessage(){
        this.openDoor();
    }
}

业务封装类

public class Notice {
    private void business(String className,String methodName) throws Exception{
        SendMessager sendMessager = new SendMessager();
        sendMessager.sendMessage(className, methodName);
    }
    private void getParam() throws  Exception{
        //通过new Scanner(System.in)创建一个Scanner类型的名叫scanner的对象,
        //控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给scanner
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入类名");
        //nextLine()方法的作用时获取当前行的输入内容,
        //返回得到的是回车键之前的所有字符,包括空格
        String className = scanner.nextLine();
        System.out.println("请输入方法名");
        String methodName = scanner.nextLine();
        this.business(className, methodName);
    }
    public void notice() throws Exception{
        this.getParam();
    }
}

客户端类

public class Client {
    public static void main(String[] args) throws Exception {
        Notice notice = new Notice();
        notice.notice();
    }
}

实现效果

四:总结

面向过程思想

  1. 以过程为中心的编程思想
  2. 使用函数实现面向过程的思想
  3. 主要关注“怎么做”

面向对象思想

  1. 以对象为基础的编程思想
  2. 主要关注“谁来做”

封装的好处

  1. 提高代码的安全性
  2. 提高代码的复用性
  3. “高内聚”:封装细节,便于修改内部代码,提高可维护性
  4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作


相关文章
|
5月前
|
算法 Java 编译器
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-1
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
123 3
|
5月前
|
算法 Java 编译器
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-3
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
40 0
|
5月前
|
存储 编译器 程序员
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-2
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
63 0
|
2月前
|
算法 搜索推荐 程序员
代码之韵:寻找编程中的艺术与逻辑
【2月更文挑战第31天】 在数字的海洋里,每一行代码都是波光粼粼的涟漪。本文旨在探索编程不仅仅是一门技术,更是一种艺术形式。我们将透过编程语言的框架,挖掘其内在的美学和逻辑韵律。从变量的命名到函数的结构,再到算法的设计,每一个细节都蕴含着程序员对完美的追求和创意的表达。文章将通过实例分析、历史回顾以及对未来趋势的展望,揭示编程如何成为现代最具创造力和表现力的活动之一。
|
2月前
|
人工智能 算法 物联网
代码之韵:探索编程的艺术与逻辑
【2月更文挑战第22天】 在数字化的浪潮中,编程已成为一种现代魔法,它不仅塑造了技术世界的未来,更影响了我们的思维模式。本文将深入探讨编程的核心要素,从语言的精确性到逻辑的构建,再到创造性思维的培养。我们将一同穿梭在代码的森林中,寻找那些令人着迷的模式与结构,揭示编程艺术背后隐藏的智慧和美感。
|
10月前
项目实战18—面向对象的开门小例子
项目实战18—面向对象的开门小例子
54 0
|
10月前
项目实战典型案例18——开门小例子理解面向对象
项目实战典型案例18——开门小例子理解面向对象
64 0
|
10月前
|
安全 C#
案例18-案例开门小例子面向对象演化
案例18-案例开门小例子面向对象演化
|
10月前
|
前端开发
项目实战典型案例22——原型图的面向对象思路
项目实战典型案例22——原型图的面向对象思路
51 1
|
10月前
|
设计模式 监控 Java
案例18-面向对象之开门小例子
面向对象之开门小例子