模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

news2024/11/15 13:32:52

【案例11-3】 模拟QQ登录

【案例介绍】

1.案例描述

QQ是现实生活中常用的聊天工具,QQ登录界面看似小巧、简单,但其中涉及的内容却很多,对于初学者练习Java Swing工具的使用非常合适。本案例要求使用所学的Java Swing知识,模拟实现一个QQ登录界面。

2.运行结果

 

运行结果

【案例分析】

(1)首先,需要定义一些成员变量,如最小化、关闭、账号、密码、头像等,方便响应的逻辑实现。

(2)由于需要对账号、密码、头像等进行布局,故需要先对这些对象进行实例化。

(3)在对需要用到的文本框、图片等对象进行实例化过后,可以使用对象.setBounds()设置文本框、图片等组件的位置。

(4)接下来,对最小化、关闭、账号、密码、头像等添加监听事件。同时,对窗体也添加窗体拖动监听事件。

(5)最后,为最小化、关闭等编写点击时的执行逻辑。为账号、密码等设置点击、悬停等执行逻辑。

【案例实现】

Login.java

  1. package chapter1103;
  2. import java.awt.Color;
  3.     import java.awt.Cursor;
  4.     import java.awt.Font;
  5.     import java.awt.Point;
  6.     import java.awt.Toolkit;
  7.     import java.awt.event.FocusEvent;
  8.     import java.awt.event.FocusListener;
  9.     import java.awt.event.MouseEvent;
  10.     import java.awt.event.MouseListener;
  11. import java.awt.event.MouseMotionListener;
  12. import javax.swing.ImageIcon;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JPanel;
  17. import javax.swing.JPasswordField;
  18. import javax.swing.JTextField;
  19. public class Login extends JFrame implements MouseListener {
  20.     JLabel bacgrangd, jan,bi,QQ,qq,tu;//gif,最小化,关闭,logo,QQ,头像
  21.     JLabel an1, an2, lie1, lie2;// 暗色块|线
  22.     JTextField user;// 账号
  23.     JPasswordField pass;// 密码
  24.     JPanel bgcolor;//
  25.     JLabel su1, mi1, ku1, ku2, gou1, gou2;// 缩略图
  26.     JLabel text1, text2, text3, text4, text5;//自动登录,记住密码,找回
  27. //密码,注册账号,登录
  28.     static Point origin = new Point();// 变量,用于可拖动窗体
  29.     int a = 0, b = 0, c = 0, d = 0;// 控制线
  30.     int f = 0, g = 0, h = 0, j = 0;// 控制√
  31.     JLabel submit, ma;// 背景
  32.     public Login() {
  33.         //实例化
  34.         bacgrangd = new JLabel(new ImageIcon("images/1.gif"));
  35.         jan = new JLabel(new ImageIcon("images/最小化.png"));
  36.         bi = new JLabel(new ImageIcon("images/关闭.png"));
  37.         QQ = new JLabel(new ImageIcon("imagesqq.png"));
  38.         qq = new JLabel("QQ");
  39.         an1 = new JLabel();
  40.         an2 = new JLabel();// 暗调
  41.         tu = new JLabel(new ImageIcon("images/头像.png"));
  42.         user = new JTextField();
  43.         pass = new JPasswordField();
  44.         su1 = new JLabel(new ImageIcon("images/qq (1).png"));
  45.         mi1 = new JLabel(new ImageIcon("images/密码.png"));
  46.         lie1 = new JLabel(new ImageIcon("images/直线2.png"));
  47.         lie2 = new JLabel(new ImageIcon("images/直线2.png"));
  48.         bgcolor = new JPanel();
  49.         ku1 = new JLabel(new ImageIcon("images/框框.png"));
  50.         ku2 = new JLabel(new ImageIcon("images/框框.png"));
  51.         gou1 = new JLabel(new ImageIcon("images/对勾.png"));
  52.         gou2 = new JLabel(new ImageIcon("images/对勾.png"));
  53.         text1 = new JLabel("自动登录");
  54.         text2 = new JLabel("记住密码");
  55.         text3 = new JLabel("找回密码");
  56.         text4 = new JLabel("注册账号");
  57.         text5 = new JLabel("登录");
  58.         submit = new JLabel();
  59.         ma = new JLabel(new ImageIcon("images/二维码.png"));
  60.         //位置
  61.         bacgrangd.setBounds(-35, -123, 500, 250);
  62.         jan.setBounds(364, 2, 32, 32);
  63.         bi.setBounds(396, 3, 32, 32);
  64.         QQ.setBounds(10, 10, 32, 32);
  65.         qq.setBounds(50, 5, 45, 45);
  66.         an1.setBounds(361, 0, 35, 35);
  67.         an2.setBounds(395, 0, 35, 35);
  68.         tu.setBounds(170, 80, 90, 85);
  69.         user.setBounds(130, 160, 180, 40);
  70.         pass.setBounds(130, 200, 180, 40);
  71.         su1.setBounds(100, 170, 20, 20);
  72.         mi1.setBounds(100, 210, 20, 20);
  73.         lie1.setBounds(100, 190, 240, 10);
  74.         lie2.setBounds(100, 230, 240, 10);
  75.         bgcolor.setBounds(0, 125, 500, 300);
  76.         ku1.setBounds(100, 250, 20, 20);
  77.         ku2.setBounds(190, 250, 20, 20);
  78.         gou1.setBounds(106, 255, 10, 10);
  79.         gou2.setBounds(196, 255, 10, 10);
  80.         text1.setBounds(125, 250, 80, 20);
  81.         text2.setBounds(215, 250, 80, 20);
  82.         text3.setBounds(288, 250, 80, 20);
  83.         text4.setBounds(15, 300, 80, 20);
  84.         text5.setBounds(206, 285, 80, 20);
  85.         submit.setBounds(100, 280, 242, 35);
  86.         ma.setBounds(385, 290, 30, 30);
  87.         //属性
  88.         qq.setFont(new Font("微软雅黑", 1, 25));
  89.         qq.setForeground(Color.white);
  90.         an1.setBackground(new Color(0, 0, 0, 0.3f));
  91.         an2.setBackground(new Color(0, 0, 0, 0.3f));
  92.         bgcolor.setBackground(new Color(255, 255, 255));
  93.         user.setForeground(Color.gray);
  94.         user.setText("QQ号码/手机/邮箱");
  95.         user.setOpaque(false);// 透明背景
  96.         user.setBorder(null);// 去掉边框
  97.          // 框内文字样式
  98.         user.setFont(new Font("微软雅黑", Font.PLAIN, 16));
  99.          // 框内文字样式
  100.         pass.setFont(new Font("微软雅黑", Font.PLAIN, 16));
  101.         pass.setBorder(null);// 去掉边框
  102.         pass.setOpaque(false);// 透明背景
  103.         pass.setForeground(Color.gray);
  104.         pass.setText("密码");
  105.         pass.setEchoChar((char) 0);// 让密码显示出来
  106.         text1.setFont(new Font("微软雅黑", 0, 12));
  107.         text2.setFont(new Font("微软雅黑", 0, 12));
  108.         text3.setFont(new Font("微软雅黑", 0, 12));
  109.         text4.setFont(new Font("微软雅黑", 0, 12));
  110.         text5.setFont(new Font("微软雅黑", 0, 15));
  111.         text1.setForeground(new Color(170, 170, 170));
  112.         text2.setForeground(new Color(170, 170, 170));
  113.         text3.setForeground(new Color(170, 170, 170));
  114.         text4.setForeground(new Color(170, 170, 170));
  115.         text5.setForeground(Color.white);
  116.         gou1.setVisible(false);
  117.         gou2.setVisible(false);
  118.         submit.setBackground(new Color(5, 186, 251));
  119.         submit.setOpaque(true);
  120.      text3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  121.      text4.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  122.         //事件区域
  123.         jan.addMouseListener(this);
  124.         bi.addMouseListener(this);
  125.         user.addMouseListener(this);
  126.         pass.addMouseListener(this);
  127.         text1.addMouseListener(this);
  128.         text2.addMouseListener(this);
  129.         text3.addMouseListener(this);
  130.         text4.addMouseListener(this);
  131.         ku1.addMouseListener(this);
  132.         ku2.addMouseListener(this);
  133.         submit.addMouseListener(this);
  134.         ma.addMouseListener(this);
  135.         this.addMouseListener(this);
  136.          // 窗体拖动事件
  137.  this.addMouseMotionListener(new MouseMotionListener() {
  138.            public void mouseMoved(MouseEvent e) {
  139.         }
  140.     public void mouseDragged(MouseEvent e) {
  141.        Point p = getLocation();
  142.         setLocation(p.x + e.getX()-origin.x, p.y + e.getY()-origin.y);
  143.     }
  144. });
  145. user.addFocusListener(new FocusListener() {
  146.      public void focusLost(FocusEvent e) {// 失去焦点
  147.          su1.setIcon(new javax.swing.ImageIcon("images/qq (1).png"));
  148.          lie1.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  149.              c = 0;
  150.               // 判断是否为空(为了设置默认提示语)
  151.              if (user.getText().isEmpty()) {
  152.                    user.setForeground(Color.gray);
  153.                    user.setText("QQ号码/手机/邮箱");
  154.                }
  155.            }
  156.         // 得到焦点
  157.        public void focusGained(FocusEvent e) {
  158.          user.setForeground(Color.black);
  159.          lie1.setIcon(new javax.swing.ImageIcon("images/直线3.png"));
  160.                a = 1;
  161.                c = 1;
  162.                b = 0;
  163.           su1.setIcon(new javax.swing.ImageIcon("images/qq(2).png"));
  164.                if (user.getText().equals("QQ号码/手机/邮箱")) {
  165.                    user.setText("");
  166.                } else {
  167.                    user.setText(user.getText());
  168.                    user.selectAll();
  169.                }
  170.            }
  171.         });
  172.         pass.addFocusListener(new FocusListener() {
  173.             // 失去焦点
  174.            public void focusLost(FocusEvent e) {
  175.             // 失去焦点换图片
  176.            lie2.setIcon(new javax.swing.ImageIcon("images/2.png"));
  177.            mi1.setIcon(new javax.swing.ImageIcon("images/密码.png"));
  178.                d = 0;
  179.                if (pass.getText().isEmpty()) {
  180.                    pass.setForeground(Color.gray);
  181.                    pass.setText("密码");
  182.                    pass.setEchoChar((char) 0);// 让密码显示出来
  183.                }
  184.            }
  185.         public void focusGained(FocusEvent e) {// 得到焦点
  186.                mi1.setIcon(new javax.swing.ImageIcon("images/密码"+
  187.                   " (1).png"));
  188.                lie2.setIcon(new javax.swing.ImageIcon("images/直线"+
  189.                   "3.png"));
  190.                b = 1;
  191.                a = 0;
  192.                d = 1;
  193.                pass.setForeground(Color.black);
  194.                pass.setEchoChar('*');// 让用户输入看不见
  195.                if (pass.getText().equals("密码")) {
  196.                    pass.setText("");
  197.                } else {
  198.                    pass.setText(pass.getText());
  199.                }
  200.            }
  201.         });
  202.         this.setLayout(null);// 布局
  203.         this.add(jan);
  204.         this.add(bi);
  205.         this.add(qq);
  206.         this.add(QQ);
  207.         this.add(an1);
  208.         this.add(an2);
  209.         this.add(tu);
  210.         this.add(lie1);
  211.         this.add(lie2);
  212.         this.add(user);
  213.         this.add(pass);
  214.         this.add(su1);
  215.         this.add(mi1);
  216.         this.add(gou1);
  217.         this.add(gou2);
  218.         this.add(ku1);
  219.         this.add(ku2);
  220.         this.add(text1);
  221.         this.add(text2);
  222.         this.add(text3);
  223.         this.add(text4);
  224.         this.add(text5);
  225.         this.add(submit);
  226.         this.add(ma);
  227.         this.add(bgcolor);
  228.         this.add(bacgrangd);
  229.         this.setSize(430, 330);
  230. this.setIconImage(Toolkit.getDefaultToolkit().createImage("images"+
  231.     "/透明照片.png"));// 窗体图标
  232.         this.setLocationRelativeTo(null);// 保持居中
  233.         this.setUndecorated(true);// 去顶部
  234.         this.setFocusable(true);// 面板首先获得焦点
  235.         this.setBackground(new Color(255, 255, 255));// 背景颜色
  236.         this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
  237.         this.setAlwaysOnTop(true);// 最顶层
  238.         this.setVisible(true);// 显示
  239.     }
  240.     public static void main(String[] args) {
  241.         new Login();
  242.     }
  243.     // 点击不恢复
  244.     public void mouseClicked(MouseEvent e) {
  245.     }
  246.     // 点击后
  247.     public void mousePressed(MouseEvent e) {
  248.         if (e.getSource() == jan) {
  249.            setExtendedState(JFrame.ICONIFIED);
  250.         } else if (e.getSource() == this) {
  251.            origin.x = e.getX();
  252.            origin.y = e.getY();
  253.         } else if (e.getSource() == bi) {
  254.            System.exit(0);
  255.         } else if (e.getSource() == ku1 || e.getSource() == text1) {
  256.            if (f == 0) {
  257.                gou1.setVisible(true);
  258.                g = 1;
  259.                f = 1;
  260.            } else if (g == 1) {
  261.                gou1.setVisible(false);
  262.                f = 0;
  263.                g = 0;
  264.            }
  265.         } else if (e.getSource() == ku2 || e.getSource() == text2) {
  266.            if (h == 0) {
  267.                gou2.setVisible(true);
  268.                j = 1;
  269.                h = 1;
  270.            } else if (j == 1) {
  271.                gou2.setVisible(false);
  272.                h = 0;
  273.                j = 0;
  274.             }
  275.       } else if (e.getSource() == submit || e.getSource() == text5) {
  276.            text5.setFont(new Font("微软雅黑", 0, 14));
  277.            dispose();
  278.            String users = user.getText();
  279.            String password = pass.getText();
  280.            if (users.equals("itcast") && password.equals("123")) {
  281.            //new Table();//打开新的主界面如果要关闭登录界面可以写dispose();
  282.            } else {
  283.            JOptionPane.showMessageDialog(null, "用户名:itcast,密"+
  284.                    "码:123,您并未设置打开界面!");
  285.                new Login();
  286.            }
  287.         }
  288.     }
  289.      // 点击时
  290.     public void mouseReleased(MouseEvent e) {
  291.         if (e.getSource() == submit || e.getSource() == text5) {
  292.            text5.setFont(new Font("微软雅黑", 0, 15));
  293.         }
  294.     }
  295.      // 悬停
  296.     public void mouseEntered(MouseEvent e) {
  297.         if (e.getSource() == jan) {
  298.            an1.setOpaque(true);
  299.         } else if (e.getSource() == bi) {
  300.            an2.setOpaque(true);
  301.         } else if (e.getSource() == user) {
  302.            if (a == 0 && c == 0) {
  303.          lie1.setIcon(new javax.swing.ImageIcon("images/直线4.png"));
  304.            }
  305.         } else if (e.getSource() == pass) {
  306.            if (b == 0 && d == 0) {
  307.          lie2.setIcon(new javax.swing.ImageIcon("images/直线4.png"));
  308.            }
  309.         } else if (e.getSource() == text3) {
  310.            text3.setForeground(Color.GRAY);
  311.         } else if (e.getSource() == text4) {
  312.            text4.setForeground(Color.GRAY);
  313.         } else if (e.getSource() == ma) {
  314.           ma.setIcon(new javax.swing.ImageIcon("images/二维码2.png"));
  315.         }
  316.     }
  317.     public void mouseExited(MouseEvent e) {// 悬停后
  318.         if (e.getSource() == jan) {
  319.            an1.setOpaque(false);
  320.         } else if (e.getSource() == bi) {
  321.            an2.setOpaque(false);
  322.         } else if (e.getSource() == user) {
  323.            if (a == 0) {
  324.          lie1.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  325.            }
  326.         } else if (e.getSource() == pass) {
  327.            if (b == 0) {
  328.          lie2.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  329.            }
  330.         } else if (e.getSource() == text3) {
  331.            text3.setForeground(new Color(170, 170, 170));
  332.         } else if (e.getSource() == text4) {
  333.            text4.setForeground(new Color(170, 170, 170));
  334.         } else if (e.getSource() == ma) {
  335.            ma.setIcon(new javax.swing.ImageIcon("images/二码.png"));
  336.         }
  337.     }
  338. }

上述代码中,第19-30行代码,定义了一些成员变量,方便响应的逻辑实现。第33-58行代码,对一些图片对象进行实例化。第60-85行,设置图片、文本框等的位置。第87-120行,设置各个文本框,文字等的样式。第122-134行,为各个文本框、按钮等设置监听事件。第136-143行,为窗体拖动事件设置窗体监听。第144-170,为账号文本框设置鼠标聚焦事件。第171-200,为密码文本框设置鼠标聚焦事件。第201-227行,将各个按钮,图片文本框对象放入容器内。第228-238,对界面进行布局。mouseClicked()方法中编写了按钮,文本框,文字等点击不回复的逻辑。mousePressed()方法中编写了按钮,文本框,文字等点击后的逻辑。mouseReleased()方法中编写了按钮,文本框,文字等点击时的逻辑。mouseEntered()方法中编写了按钮,文本框,文字等悬停时的逻辑。mouseExited()方法中编写了按钮,文本框,文字等悬停后的逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理(2.2)--系统总线

目录 一、总线结构 1.单总线结构 1.1单总线结构框图 ​编辑1.2单总线性能下降的原因 2.多总线结构 2.1双总线结构 2.2三总线结构 2.3四总线结构 ​编辑 二、总线结构举例 1. 传统微型机总线结构 2. VL-BUS局部总线结构 3. PCI 总线结构 4. 多层 PCI 总线结构 …

手撕八大排序(下)

目录 交换排序 冒泡排序: 快速排序 Hoare法 挖坑法 前后指针法【了解即可】 优化 再次优化(插入排序) 迭代法 其他排序 归并排序 计数排序 排序总结 结束了上半章四个较为简单的排序,接下来的难度将会大幅度上升&…

安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具

注意:本文仅作参考勿跟操作,root需谨慎,本次测试用的N手Pixel,因参考本文将真机刷成板砖造成的损失与本人无关 1 Google Pixel介绍 1.1手机 google Pixel 在手机选择上,优先选择谷歌系列手机,Nexus和Pixel系列&…

mac系统上hdfs java api的简单使用

文章目录1、背景2、环境准备3、环境搭建3.1 引入jar包3.2 引入log4j.properties配置文件3.3 初始化Hadoop Api4、java api操作4.1 创建目录4.2 上传文件4.3 列出目录下有哪些文件4.4 下载文件4.5 删除文件4.6 检测文件是否存在5、完整代码1、背景 在上一节中,我们简…

五分钟进步系列之nginx(一)

学习方式:先读英文的原版,如果你能看懂就可以到此为止的了。如果你看不懂,可以再看一下我给的较高难度的英文单词的翻译。如果还是看不懂可以去最下面看我翻译的汉语。下面是我在nginx官网中找到的一段话,它给我们描述了nginx的负…

JAVA中加密与解密

BASE64加密/解密 Base64 编码会将字符串编码得到一个含有 A-Za-z0-9/ 的字符串。标准的 Base64 并不适合直接放在URL里传输,因为URL编码器会把标准 Base64 中的“/”和“”字符变为形如 “%XX” 的形式,而这些 “%” 号在存入数据库时还需要再进行转换&…

软件自动化测试工程师面试题集锦

以下是部分面试题目和我的个人回答,回答比较简略,仅供参考。不对之处请指出 1.自我介绍 答:姓名,学历专业,技能,近期工作经历等,可以引导到最擅长的点,比如说代码或者项目 参考&a…

Qt音视频开发19-vlc内核各种事件通知

一、前言 对于使用第三方的sdk库做开发,除了基本的操作函数接口外,还希望通过事件机制拿到消息通知,比如当前播放进度、音量值变化、静音变化、文件长度、播放结束等,有了这些才是完整的播放功能,在vlc中要拿到各种事…

ImportError: Can not find the shared library: libhdfs3.so解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

WSL2通过OpenCV调用并展示本机摄像头的RTSP视频流

文章目录前言安装 CMake安装 OpenCV 和 FFmpeg启动 Windows 本机的 RTSP 视频流查看本机摄像头设备开始推流开放本机防火墙用 OpenCV 接收视频流结果展示前言 本篇博客的由来如上图哈哈,WSL2 相关安装教程可以参考我之前的博客:Win11安装WSL2和Nvidia驱动…

如果我只有一个奔腾CPU,怎么加速推理神经网络?

前言 有人说当下的AI热潮不过是算力堆砌的产物。现在层出不穷的各种大模型大训练集,使用复杂精致的技术在排行榜上不断刷新分数,这些人似乎忘了一件事情,AI模型最终是要落地的,是要用的,如果不能普及开去那和在象牙塔…

2023年最新软著申请流程(一):软件著作权说明、国家版权官网的账号注册与实名认证

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/129230460 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

如何使用Cliam测试云端环境IAM权限安全

关于Cliam Cliam是一款针对云端安全的测试工具,在该工具的帮助下,广大研究人员可以轻松枚举目标云端环境的IAM权限。当前版本的Cliam支持下列云端环境:AWS、Azure、GCP和Oracle。 Cliam同时也是一个云端权限识别工具,该工具是一…

Mapper代理开发——书接MaBatis的简单使用

在这个mybatis的普通使用中依旧存在硬编码问题,虽然静态语句比原生jdbc都写更少了但是还是要写,Mapper就是用来解决原生方式中的硬编码还有简化后期执行SQL UserMapper是一个接口,里面有很多方法,都是一一和配置文件里面的sql语句的id名称所对…

HEC-HMS和HEC-RAS快速入门、防洪评价报告编制及洪水建模、洪水危险性评价等应用

目录 ①HEC-RAS一维、二维建模方法及实践技术应用 ②HEC-HMS水文模型实践技术应用 ③新导则下的防洪评价报告编制方法及洪水建模实践技术应用 ④基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估 ⑤山洪径流过程模拟及洪水危险性评价 ①HEC-RAS一维、二维建模方…

Torch同时训练多个模型

20230302 引言 在进行具体的研究时,利用Torch进行编程,考虑到是不是能够同时训练两个模型呢?!而且利用其中一个模型的输出来辅助另外一个模型进行学习。这一点,在我看来应该是很简单的,例如GAN网络同时训…

docker安装rabbitmq并挂载

1、拉取镜像 management:表示可以通过web页面管理。 alpine:表示是linux最小版本,不推荐新手安装。 docker pull rabbitmq:management2、创建用于挂载的目录 mkdir -p /mydata/rabbitmq/{data,conf,log} # 创建完成之后要对所创建文件授权…

从菜鸟程序员到高级架构师,竟然是因为这个字final

final实现原理 简介 final关键字,实际的含义就一句话,不可改变。什么是不可改变?就是初始化完成之后就不能再做任何的修改,修饰成员变量的时候,成员变量变成一个常数;修饰方法的时候,方法不允…

23种设计模式之简单工厂模式

一、场景简介 1、引入场景 订餐流程简单描述 食品抽象类,规定食品的基础属性操作 鱼类,鸡肉类食品类扩展 订餐流程类,根据食品名称,加工指定类型食品 模拟客户端预定操作 2、源代码实现 关系图谱 代码实现 /*** 简单工厂模式引入场景*/ public class C01_InScene { p…

【word】论文排版思路

1、 首先把所有中文的字体都按照要求改一下,记住都改成正文的字号和字体,后面再修改标题的,然后再改英文的,不要把顺序弄错了,不然得回头再改标题 然后定位文章里所有英文方法如下: 按CTRLF打开替换对话…