代码复用规则

代码复用规则

1、 对接口编程

2、 优先使用对象组合,而不是类继承

3、 将可变的部分和不可变的部分分离
    抽象基类中定义好不可变的部分,而由其子类去具体实现可变的部分,不可变的部分不需要重复定义

4、 减少方法的长度

三十秒原则:
如果另一个程序员无法在三十秒之内了解你的函数做了什么(What),如何做(How)以及为什么要这样做
(Why),那就说明你的代码是难以维护的,必须得到提高;

一屏原则:
如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了,应该拆分成更小的子函数;
一行代码尽量简短,并且保证一行代码只做一件事,那种看似技巧性的冗长代码只会增加代码维护的难度。

5、 减少参数个数

6、 类层次的最高层应该是抽象类

7、 尽量减少对变量的直接访问

8、 子类应该特性化,完成特殊功能

9、 拆分过大的类

10、 作用截然不同的对象应该拆分

11、 尽量减少对参数的隐含传递

 

### SPI复用规则 在Java服务提供者接口编程中,SPI(Service Provider Interface)机制允许第三方实现替换或扩展标准API的功能。为了确保不同提供商之间的兼容性和互操作性,遵循一定的复用规则至关重要。 #### 1. 声明服务提供者接口 服务提供者接口应当被定义在一个公共可访问的位置,并且通常位于某个核心库内。该接口不应依赖于任何特定的服务实现细节[^3]。 ```java public interface MyServiceProvider { void performAction(); } ``` #### 2. 提供具体实现类 每个希望参与此服务的组件都需要创建一个实现了上述接口的具体类。这些具体的实现应该放置在其自己的模块或JAR文件中[^3]。 #### 3. 注册服务提供者实例 对于每一个新的服务实现,在META-INF/services目录下需创建一个名为`<fully-qualified-interface-name>`的资源文件。这个文件的内容应为每一行指定一个完整的实现类名称[^3]。 例如,如果要注册一个新的MyServiceProvider实现,则应在项目结构中的`src/main/resources/META-INF/services/com.example.MyServiceProvider`添加如下内容: ``` com.mycompany.impl.MyServiceImpl ``` #### 4. 加载并使用服务提供者 应用程序可以通过`ServiceLoader`来加载所有可用的服务提供者实例。这使得即使是在运行时动态加入的新实现也能被自动发现和利用[^3]。 ```java import java.util.ServiceLoader; // ... ServiceLoader<MyServiceProvider> loader = ServiceLoader.load(MyServiceProvider.class); for (MyServiceProvider spi : loader) { spi.performAction(); // 调用各个实现的方法 } ``` 通过这种方式,多个不同的服务提供者可以在不修改原有代码的情况下轻松集成到同一个应用环境中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值