一个肉夹馍思考的零耦合设计

       刷抖音听说知识付费是普通人的一个收入增长点,写了三十几篇文章一毛钱没赚,感觉有点沮丧。天上下着小雨雨,稀稀嗦嗦的,由于了很久还是买了一个🤨。

4b210cd3ebc14b18898774061be580ce.jpg

 忽然觉得生活有点悲催,现在已经变得斤斤计较,有点市侩了。继而是无聊,写篇文章。

         Java中可不可以类直接零耦合呢?最终发现一个方法可以实现。我们来模拟五一的一次度假旅游。最初的计划是从美国坐飞机去西安happy,代码如下:

package feiJi;

import java.util.*;

public class Flying {
  public Flying() {}

  private String startCity = "americ";
  private String endCity = "Xi'An";

  public void huaXiang() {
    Globle.staticFlying = this;
    System.out.println("Hai,begin repare…");
  }

  private void flying() {
    System.out.println("开始起飞起始站:" + startCity);
  }

  private void arrived() {
    System.out.println("到达站点:" + endCity);
  }

  public void setStartCity(String cityName) {
    this.startCity = cityName;
  }

  public void setEndCity(String cityName) {
    this.endCity = cityName;
  }

  public void happy() {
    flying();
    arrived();
  }
}
在主方法中调用如下:

import java.util.*;
import feiJi.*;

public class Main {
  private static HeiBox heiBox;

  public static void main(String[] args) {
    System.out.println("开始测试");
    Flying flying = new Flying();
    flying.huaXiang();
    if (HeiBox.flying == null) {
      try {
        Class.forName("feiJi.exWorld.MyHeiBoxMei").newInstance();
      } catch (Exception e) {
        flying.happy();
      } finally {
      }
    }
  }
}
运行结果如下图,一切都是最初设想。

c67b309b24cf4013ac024fa38a45fd73.jpg

 在期中预留一个类将系统本身的部分类引出去,如果没有其它类引用,系统正常运行,这种预留没有任何影响。代码如下:

package feiJi;

import java.util.*;

public class HeiBox {
  public static Flying flying;
}
忽然有一天,系统正常运行着,你在某个位置随手写了一个类放到某个位置。你会惊奇的发现,航线变了。

f36e469977c740cba5aaf201fb6d582c.jpg

 是不是挺意外的,其实并不复杂,只是常规的多态。代码如下:

package feiJi.exWorld;

import java.util.*;
import feiJi.*;
public class MyHeiBox extends HeiBox {
  public static Flying flying;

  public MyHeiBox() {
    flying = Globle.staticFlying;
    flying.setStartCity("americ");
    flying.setEndCity("洛阳");
    flying.happy();
    System.out.println("现在相当于新的飞行员了,路线可以自由驾驶。");
  }
}
这可以作为一种将系统扩展转移给另外一部分人的方法。

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

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

相关文章

Android by viewModels()

在Android中,您可以使用ViewModel来管理UI相关的数据,而不会在配置更改(如旋转屏幕)后丢失数据。by viewModels()是一个Kotlin扩展函数,它允许您以类型安全的方式从Fragment或Activity中获取ViewModel实例。 以下是如…

Java里面的异常

Java里面的异常 父类: Exception 异常分为两类: 编译时异常:没有继承RuntimeException的异常,直接继承于Exception,编译阶段就会错误提示(用来提示程序员) 运行时异常:RuntimeException本身和子类,编译阶段没有错误提示,运行时出现的 可以写多个catch,如果存在父子关系,父要…

Modelsim自动仿真平台的搭建

Modelsim自动仿真平台的搭建 如果要搭建自动仿真平台脚本那就需要更改下面3个文件。run_simulation.bat、complie.do和wave.do文件。注:前提是安装了modulsim并且配置好了环境变量,这里不过多介绍。 一、下面是run_simulation.bat文件的内容 : 注释的…

四足机器人摆线规划程序

一、标准摆线公式 { x r ∗ ( θ − sin ⁡ ( θ ) ) y r ∗ ( 1 − cos ⁡ ( θ ) ) \left\{\begin{array}{l} xr *(\theta-\sin (\theta)) \\ yr *(1-\cos (\theta)) \end{array}\right. {xr∗(θ−sin(θ))yr∗(1−cos(θ))​ 这里的r表示摆线的圆的半径, θ \…

3:容器之分类和各种测试

文章目录 array测试array容器bsearch之前用qsort 可以极大提高搜索效率 测试vector容器list容器forward_list容器测试slistdeque容器stack容器quque为什么stack 和 queue这样的容器 没有迭代器的相关内容 multiset代码里面有使用 stl自带的find 和 容器自带的find 一般容器自带…

计算机视觉科普到实践

第一部分:计算机视觉基础 引言: 计算机视觉作为人工智能领域的一个重要分支,近年来取得了显著的进展。本文将带领读者深入了解计算机视觉的基础知识,并通过实践案例展示其应用。让我们一同探索这个令人着迷的领域吧!…

docker compose mysql主从复制及orchestrator高可用使用

1.orchestrator 功能演示: 1.1 多级级联: 1.2 主从切换: 切换成功后,原来的主库是红色的,需要在主库的配置页面点击“start replication ”,重新连接上新的主库。 1.3 主从故障,从库自动切换新…

高精度(加减乘除)

1.加法 我们第一位存低位&#xff08;倒着存方便&#xff09; 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N1e610; vector<int> add(vector<int> &A,vector<int> &B) {vector<int> c;int t0;for…

【JVM】从硬件层面和应用层面的有序性和可见性,到Java的volatile和synchronized

Java的关键字volatile保证了有序性和可见性&#xff0c;这里我试着从底层开始讲一下有序性和可见性。 一&#xff0c;一致性 数据如果同时被两个cpu读取了&#xff0c;如何保证数据的一致性&#xff1f;或者换句话说&#xff0c;cpu1改了数据&#xff0c;cpu2的数据就成了无效…

python在Django中切换语言,中英文两种语言怎样切换

在Django中切换语言(比如中英文两种语言)通常涉及以下步骤: 设置语言和本地化 在你的Django项目的settings.py文件中,你需要设置LANGUAGES和LOCALE_PATHS。LANGUAGES是一个包含所有可用语言和它们的本地化的元组列表,而LOCALE_PATHS是包含.mo翻译文件路径的列表。 pyth…

LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历

本文详细探讨了五种二叉树中序遍历算法&#xff0c;包括递归、迭代、莫里斯遍历、线索二叉树和栈的迭代&#xff0c;评估了它们的效率和实用性。 题目描述 给定一个二叉树的根节点 root&#xff0c;返回它的中序遍历。 输入格式 root&#xff1a;二叉树的根节点。 输出格式…

基于AT89C52单片机的智能热水器控制系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/89242443?spm1001.2014.3001.5503 C 源码仿真图毕业设计实物制作步骤05 题 目 基于单片机的智能热水器系统 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期…

242 基于matlab的3D路径规划

基于matlab的3D路径规划&#xff0c;蚁群算法&#xff08;ACO&#xff09;和天牛须&#xff08;BAS&#xff09;以及两种结合的三种优化方式&#xff0c;对3D路径规划的最短路径进行寻优。程序已调通&#xff0c;可直接运行。 242 3D路径规划 蚁群算法和天牛须 - 小红书 (xiaoh…

ant-design中的穿梭框提示文字修改

ant-design中的穿梭框提示文字修改 1.ant-design中的穿梭框提示文字修改 <a-transferv-model:target-keys"targetKeys":data-source"transform.list":filter-option"filterOption":list-style"{width: 100%,height: 500px,}":rowK…

ES6类与面向对象编程

ES6类与面向对象编程 ES6&#xff08;ECMAScript 6&#xff09;引入了类的概念&#xff0c;使得面向对象编程更加简洁和直观。ES6的类可以通过class关键词定义&#xff0c;类中可以定义构造函数、属性和方法。 以下是一个使用ES6类来定义一个简单的“人”类的示例&#xff1a…

unity入门学习笔记

文章目录 unity学习笔记熟悉界面窗口页面快捷键视图特点移动、旋转、缩放快捷键聚焦和隐藏 一些基本概念模型模型的导入一些补充 资源文件资源包的导出资源包的导入 轴心物体的父子关系空物体Global与localpivot与center 组件脚本基础我的第一个脚本 获取脚本组件本地坐标播放模…

Python基础学习之os模块

在Python编程的世界中&#xff0c;内置库为我们提供了丰富的功能和工具&#xff0c;使我们能够轻松处理各种任务。其中&#xff0c;os模块是一个极其重要且常用的库&#xff0c;它提供了与操作系统交互的接口。本文将带您一起探索os模块的一些常用功能。 1. os模块简介 os模块…

顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

OceanBase 分布式数据库【信创/国产化】- OceanBase 数据并发性和一致性概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 数据并发性和一致性概述前言OceanBase 数据更新架构OceanBase 数据并发性和一致性概述数据并发性数据一致性并发控制OceanBase 分布式数据库【信创/国产化】- OceanBase 数据并发性和一致性概…

【电子通识】为什么用双绞线?双绞线抗干扰的原理是什么?

使用双绞线最大的理由是抗干扰。不仅可以防止别人干扰,也可以防止自己干扰别人。这与EMC中的EMS和EMI相对应(参考【EMC专题】电磁兼容--基本概念)。 双绞线是由一对带有绝缘层的铜线(绝缘层使两根线中的金属导体不会因为互碰而导致短路)以螺旋的方式缠绕在一起所构成的。通…