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

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

一:背景介绍

业务背景

公司老板(米老师)来公司,需要进入办公室的门,这个时候需要一个开门的人。

二:思路&方案

1.面向过程的实现思路

何老师是管理钥匙的人,何老师将钥匙放在了前台。米老师到公司之后需要开门,去前台拿去钥匙并自己去开门

2.面向对象的实现思路一(封装、继承、多态)

有专门管理钥匙的人员,当公司老板(米老师)到公司之后通知一声何老师打开水麒麟的门,何老师听到这个消息之后就过来开门了。

3.面向对象的实现思路二(封装、继承、多态、反射)

有多个老师具备管理钥匙并开门的职责,当米老师到公司之后,通知任意一个老师打开水麒麟的门,被通知的那个老师听到消息之后就过来开门。

三:实现过程

面向过程

将开门整个事都进行了封装,需要开门的人、和开门的人、管理钥匙的人都是明确的。原本何老师的工作(开门)交给了公司老板(米老师)来做

public class Client {
    public static void main(String[] args) {
        System.out.println("米老师:我需要开门");
        System.out.println("何老师:米老师,钥匙放在前台了,您开一下吧");
        System.out.println("米老师:去前台拿钥匙自己去开门了");
    }
}

2.面向对象(封装)

公司老板(米老师)来公司,需要进入办公室的门,这个时候需要一个开门的人。从这个业务中抽象出四个类来:发消息的人、接收消息的人、业务封装类、客户端类。

建模:

应该为米老师依赖于何老师,米老师需要何老师去开门。

代码编写

接收消息人类

接收消息人类有一个私有的开门方法

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

发送消息人类

发送消息人类依赖接收消息人类,

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

业务封装类

封装了一个私有的business()方法,向具体的业务进行封装不进行暴露,暴露给外部一个notice方法。

public class Notice {
    private void business(){
        ReceiveMessager receiveMessager=new ReceiveMessager();
        SendMessager sendMessager =new SendMessager();
        sendMessager.sendMessage(receiveMessager);
    }
    public void notice(){
        this.business();
    }

客户端

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

实现效果

3.面向对象(封装、反射)

在2的基础上添加了反射,这样做的意义是增加灵活性,可以由米老师,通知任何一名具有开门职责的教师去开门。并且是在程序运行期间根据指定的老师,动态实例化。

业务封装类

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 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 Client {
    public static void main(String[] args) throws Exception {
        Notice notice = new Notice();
        notice.notice();
    }
}

实现效果

四:总结

面向对象的三大特性是:封装、继承、多态。

面向对象的原则:有七大原则。

面向对象的基础是抽象。

反射的实现方式有三种

1.类对象.class

2.Class.forName(“包路径”)

3.对象.getClass()


面向对象没有好坏之分,只是各自的应用场景不同,根据不同的场景选择合适的开发思想。

面向过程更偏向于小型工程,并且开发速度相对较快,设计相对简单。而面向过程,前期投入的时间相对较多,并且性对难以理解和入门。

目录
相关文章
|
5月前
|
算法 Java 编译器
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-1
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
127 3
|
5月前
|
算法 Java 编译器
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-3
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
40 0
|
5月前
|
存储 编译器 程序员
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】-2
C++ | 深入浅出类的封装思想【图文案例,通俗易懂】
63 0
|
3天前
|
程序员 开发者
代码之美:从功能实现到艺术创作
【5月更文挑战第17天】 在数字世界的构建过程中,技术感悟往往被视为程序开发者的内在独白。本文将探讨编程不仅仅是一种科学活动,更是一场融合逻辑与创造力的艺术之旅。我们将深入理解如何将代码视为一种表达工具,通过它传达更深层次的思考和情感。文章还将分享一些编程实践中的美学原则,以及这些原则如何影响软件设计和开发的过程。
【项目实战典型案例】18.开门小例子理解面向对象
【项目实战典型案例】18.开门小例子理解面向对象
|
10月前
项目实战18—面向对象的开门小例子
项目实战18—面向对象的开门小例子
54 0
|
7月前
|
设计模式 Java 数据库连接
解锁设计模式的神秘面纱:编写无懈可击的代码之原型设计模式
解锁设计模式的神秘面纱:编写无懈可击的代码之原型设计模式
26 1
|
10月前
|
安全 C#
案例18-案例开门小例子面向对象演化
案例18-案例开门小例子面向对象演化
|
10月前
|
前端开发
项目实战典型案例22——原型图的面向对象思路
项目实战典型案例22——原型图的面向对象思路
52 1
|
10月前
|
设计模式 监控 Java
案例18-面向对象之开门小例子
面向对象之开门小例子