编程中的解耦是指降低软件系统不同组件或模块之间的相互依赖性。这就是创建独立的组件,可以在其他地方使用最小的变化,并且可以独立测试和维护。
通过减少相互依赖性,解耦使开发人员可以创建更具弹性,可扩展性且易于维护的软件系统。
实际上,这意味着可以在不影响系统的其他部分的情况下更新,更换或删除组件,从而使整个系统更易于维护。
在代码级别上实现Java的技术和设计模式
-
依赖注入(DI):依赖注入是一种通过界面或构造函数注入类的依赖性的技术。这样,一类不知道其依赖性的具体实现。
-
观察者模式:观察者模式是一种设计模式,其中主题对象将其观察者通知其发生的任何变化。
-
适配器模式:适配器模式是一种设计模式,可以将类的接口转换为适合客户端的另一个接口。
-
立面模式:立面设计模式是一种提供单个简化的公共接口,可通过隐藏其复杂性来访问复杂的类系统。
-
服务定位器模式:服务定位器模式是一个模式,提供了一个称为服务定位器的集中式注册表,允许客户通过通过服务定位器要求他们来检索所需的服务。<<<<<<<<<<<<< /p>
-
命令模式:命令模式是一种设计模式,其中对象用于表示和封装以后调用方法所需的所有信息。
< /li> -
工厂模式:工厂模式是一种模式,它提供了用于在超类中创建对象的接口,但允许子类更改将创建的对象的类型。
在这篇文章中,我们将看到使用依赖注入然后立面模式去耦的示例。
使用依赖注入(DI)在Java中的示例以实现去耦
我正在使用依赖注入的技术进行脱钩。我们将通过将对象的使用与其创建分解为独立于其依赖性。
假设我们有一辆对发动机依赖的汽车。我们没有在汽车类中创建引擎类实例,而是将引擎类作为使用构造函数的依赖项,
public interface Engine {
void start();
void stop();
}
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
}
public void stop() {
engine.stop();
}
}
这使得 car 类别独立于 Engine 的任何特定实现。
我们可以创建引擎界面的不同实现,例如 asolineEngine 或 electricEngine
public class Main {
public static void main(String[] args) {
Engine engine = new GasolineEngine(); // create an instance of GasolineEngine
Car car = new Car(engine); // inject the GasolineEngine into the Car
car.start(); // start the car
car.stop(); // stop the car
}
}
这说明了解耦如何帮助我们构建可使用的可互换组件,而无需影响代码的其余部分。
使用立面模式在Java中进行示例以实现脱钩
让我们看看如何使用立面模式使代码解耦。
我们有一个使用第三方库的应用程序,它们都在整个地方,因此该应用程序与这些库相结合。例如,我们有
public int f(int x) {
Y y = new Y(x);
return y.someCalculations();
}
其中 y 是第三方的班级。
解决方案
我们使用立面模式将第三方库类包装到我想要接触到应用程序的界面/类中。
因此,当图书馆更改时,我只需要重写我的 myfacadeclass
public class MyFacadeClass {
private Y y = new Y();
public int someCalculations(int myParam){
y.someCalculations(myParam);
}
}
注意:立面和适配器是非常相似的设计模式,关键区别在于,外墙不会改变其他子系统的域模型,而适配器则可以。这就是为什么我在这里使用立面。
这说明了解耦如何帮助我们使用第三方库而无需将它们耦合到我们自己的代码。
更大的图片
如果UI和数据库紧密耦合,则可能需要更改另一个更改。但是,通过将UI和数据库解耦,每个都可以独立修改另一个,因此我们可以更改UI而不影响数据库或交换数据库而无需更改UI。
。如果更改请求包括对UI和DB的更改怎么办?
当需要更改(例如添加新字段)时,必须对API层进行更新以处理它,并且UI层必须显示它。不要忘记我们需要保存数据的数据库层。
在这种情况下,即使不是完全消除了每种变化的需求,也可以将解耦仍然有益,因为可以在各自的层中独立进行更改,这使系统更加灵活。
将来,我们可以在UI中更改UI中添加字段的位置或外观,而不会影响系统的其他部分(数据库或API)。
我们看到完整的解耦可能并不总是可能或实用,它在使系统更加灵活和可维护方面仍然提供好处。此外,解耦也可以帮助测试,因为每个组件都可以独立于其他组件进行测试。
总结
解耦使软件系统通过减少不同组件之间的依赖性更加灵活,更易于维护。