项目实战18—面向对象的开门小例子

简介: 项目实战18—面向对象的开门小例子

一.案例背景

1.一个现实中常见的业务场景:米老师需要进入办公室,需要何老师帮忙开门,或者说需要一个开门的人。

2.面向过程的思路:何老师告诉米老师钥匙在哪里,然后米老师去取了钥匙,最后去开门

3.面向对象思路

对于这个业务场景进行抽象的话,可以抽象出四个类:发消息人类、收消息人类、业务处理类、客户端。

米老师只要喊一句开门,就有人过来把门打开了

二.案例启发

由此可以看出,面向过程的思路只是解决当前的问题,会被当前的地点,当前的人所局限,而面向对象的思路,则可以在此基础上复用,拓展,正所谓:

1.我们注重的是谁来干事,而不是怎么干事

2.我们注重的是有多少人干事,而不是干多少事

三.面向对象代码实现

1.利用抽象、封装、消息监听、事件和委托的形式,抽象出来的四个类分别是:发消息人类、收消息人类、业务处理类、客户端。

sendMessage发消息人类

package com.opendoor;
public class sendMessage {
    public void sendMessage(){
        System.out.println("我是米老老师,我需要开门");
    }
}

receiveMessage接收消息的人类

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

Notice业务处理类

package com.opendoor;
public class Notice {
    private void business(){
        receiveMessage teacherHe =new receiveMessage();
        teacherHe.receiveMessage(new sendMessage());
    }
    public void notice(){
        this.business();
    }
}

Client客户端类

package com.opendoor;
public class Client {
    public static void main(String[] args) {
  // write your code here
        Notice notice=new Notice();
        notice.notice();
    }
}

2.面向对象加入反射的形式(不再被人所局限,更加灵活),同样抽象出四个类

sendMessage发消息人类

package com.opendoorReflect;
import java.lang.reflect.Method;
//发消息人类
public class sendMessage {
    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);
    }
}

receiveMessage接收消息的人类

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

Notice业务处理类

package com.opendoorReflect;
import java.util.Scanner;
public class Notice {
    private void business(String className,String methodName) throws Exception{
        sendMessage sendMessage = new sendMessage();
        sendMessage.sendMessage(className, methodName);
    }
    private void getParam() throws Exception{
        //通过new Scanner(System.in)创建一个Scnner类型的名叫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();
    }
}

Client客户端类

package com.opendoorReflect;
public class Client {
    public static void main(String[] args) throws Exception {
        Notice notice=new Notice();
        notice.notice();
    }
}
相关文章
|
Java
Java面向对象编程(12)
Java面向对象编程(12)
62 0
|
存储 算法 Java
Java面向对象编程(36)
Java面向对象编程(36)
40 0
|
5月前
|
程序员 Python
从零到一,彻底掌握Python闭包与装饰器的精髓,成为编程界的隐藏Boss
【7月更文挑战第7天】探索Python编程的两大基石:闭包与装饰器。闭包是内部函数记住外部作用域的变量,如`make_multiplier_of`返回的`multiplier`,它保持对`n`的引用。装饰器则是函数工厂,接收函数并返回新函数,如`my_decorator`,它在不改变原函数代码的情况下添加日志功能。掌握这些,让代码更优雅,效率更高,助你成为编程高手。
35 3
|
5月前
|
Python
Python黑魔法揭秘:闭包与装饰器的高级玩法,让你代码飞起来
【7月更文挑战第7天】Python的闭包和装饰器是提升代码效率的神器。闭包是能记住外部作用域变量的内部函数,常用于动态函数创建。示例中,`make_multiplier_of`返回一个保留`n`值的闭包。装饰器则是一个接收函数并返回新函数的函数,用于在不修改原函数情况下添加功能,如日志或性能追踪。`@my_decorator`装饰的`say_hello`函数在执行时会自动加上额外操作。掌握这两者,能让Python代码更优雅、强大。**
36 1
|
7月前
|
存储 算法 程序员
代码之韵:编程中的诗意与逻辑
在数字的世界里,每一行代码都如同诗句般细腻而富有节奏感。本文将探讨编程不仅仅是一门科学或技术,更是一种艺术形式,它融合了逻辑思维的严谨和创造力的灵动。我们将通过分析编程的核心概念,如变量、控制结构、函数等,来揭示它们背后的美学原则和哲学思考。同时,我们还将讨论如何在日常的编程实践中寻找和创造美感,以及这种美感如何影响我们的工作效率和产品的用户体验。
|
网络协议 Java 网络性能优化
Java面向对象编程(38)
Java面向对象编程(38)
41 0
【项目实战典型案例】18.开门小例子理解面向对象
【项目实战典型案例】18.开门小例子理解面向对象
|
存储 算法 Java
Java面向对象编程(19)
Java面向对象编程(19)
60 0
|
SQL 分布式计算 Java
Java面向对象编程(18)
Java面向对象编程(18)
45 0
|
算法 Java 数据库
Java面向对象编程(11)
Java面向对象编程(11)
33 0
下一篇
DataWorks