【发布时间】:2019-04-06 14:13:06
【问题描述】:
我正在尝试掌握 Robert C. Martin 的 SOLID 原则。目前我正在研究低耦合和高内聚。我创建了一些代码来代表我目前对这个主题的理解。你们能告诉我是否在正确的轨道上吗?有没有机会改进当前的设计?
创建两个地址并将其分配给员工的主应用程序:
public class App {
public static void main(String[] args) {
Address homeAddress = new HomeAddress("This is my Home Address");
Address workAddress = new WorkAddress("This is my Work Address");
Employee employee = new Employee(homeAddress, workAddress);
employee.getAddresses();
}
}
员工类:
public class Employee {
private Address homeAddress;
private Address workAddress;
Employee(Address homeAddress, Address workAddress) {
this.homeAddress = homeAddress;
this.workAddress = workAddress;
}
public void getAddresses() {
System.out.println("homeAddress: " + homeAddress.getAddress());
System.out.println("workAddress: " + workAddress.getAddress());
}
}
地址接口:
public interface Address {
String getAddress();
}
具体地址实现1(HomeAddress):
public class HomeAddress implements Address {
String specificAddress;
public HomeAddress(String specificAddress) {
this.specificAddress = specificAddress;
System.out.println("In HomeAddress Constructor");
}
public String getAddress() {
return specificAddress;
}
}
具体地址实现2(WorkAddress):
public class WorkAddress implements Address {
String specificAddress;
public WorkAddress(String specificAddress) {
this.specificAddress = specificAddress;
System.out.println("In WorkAddress Constructor");
}
public String getAddress() {
return this.specificAddress;
}
}
任何帮助/反馈将不胜感激!提前致谢。
马克。
【问题讨论】:
-
为什么需要一种类型来区分工作地址和家庭地址?在您提供的代码中,您没有用新功能丰富任何子类,从而使它们变得多余。
-
两个地址都是一样的。也许你实际上不需要两个实现
-
关于低耦合和高内聚,您的代码是正确的。但请注意,对于如此轻量级的模型,很难不遵守这些原则。
-
我同意。在这个例子中,两个地址都做同样的事情。因此,在这种情况下,只有一个实现可以做到这一点。如果他们都有不同的实现,我应该创建两个单独的。谢谢你。你们如何看待这个例子中的高内聚和低耦合?我在这里做对了吗?
-
@davidxxx 谢谢。我知道这只是一个简单的设计。对我来说,一切都是为了了解基础知识。
标签: java solid-principles loose-coupling cohesion