Java中的单一责任原则
时间:2020-02-23 14:35:34 来源:igfitidea点击:
在本教程中,我们将在Java.it中了解单一责任原则是实体原则和最简单的设计原则之一。
单一责任原则决定了改变类的一个原因。
如果我们有一个以上的原因更改类,请根据函数将类重构为多个类。
我们将在一个简单的example的帮助下理解。
有人说你有客户程序如下。
package org.igi.theitroad;
import java.util.List;
public class Customer {
String name;
int age;
long bill;
List<Item> listsOfItems;
Customer(String name,int age)
{
this.name=name;
this.age=age;
}
//Calculate bill should not be responsibility of customer
public long calculateBill(long tax)
{
for (Item item:listsOfItems) {
bill+=item.getPrice();
}
bill+=tax;
this.setBill(bill);
return bill;
}
//Report generation should not be responsibility of customer
public void generateReport(String reportType)
{
if(reportType.equalsIgnoreCase("CSV"))
{
System.out.println("Generate CSV report");
}
if(reportType.equalsIgnoreCase("XML"))
{
System.out.println("Generate XML report");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public long getBill() {
return bill;
}
public void setBill(long bill) {
this.bill = bill;
}
public List<Item> getListsOfItems() {
return listsOfItems;
}
public void setListsOfItems(List<Item> listsOfItems) {
this.listsOfItems = listsOfItems;
}
}
你看到上面的程序有问题吗?
让'看看上面的上面的问题是什么。
- 如果账单计算有任何变化,那么我们需要更改客户类。
- 如果要添加一个要生成的报告类型,则需要更改客户类。
如果我们注意到,条例草案和报告生成的计算不应该是客户的责任,我们应该为这些函数创建不同的程序。
让我们现在看到重构程序。
package org.igi.theitroad;
import java.util.List;
public class Customer {
String name;
int age;
long bill;
List listsOfItems;
Customer(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public long getBill() {
return bill;
}
public void setBill(long bill) {
this.bill = bill;
}
public List getListsOfItems() {
return listsOfItems;
}
public void setListsOfItems(List listsOfItems) {
this.listsOfItems = listsOfItems;
}
}
创建一个名为Billcalculator的新类并将客户对象传递给它。
本类将负责计算客户账单
package org.igi.theitroad;
import java.util.List;
public class BillCalculator {
public long calculateBill(Customer customer,long tax)
{
long bill=0;
List listsOfItems=customer.getListsOfItems();
for (Item item:listsOfItems) {
bill+=item.getPrice();
}
bill+=tax;
customer.setBill(bill);
return bill;
}
}
创建一个名为ReportGenerator并将客户对象传递给IT的新类。
本类将负责生成客户报告
package org.igi.theitroad;
public class ReportGenerator {
public void generateReport(Customer customer,String reportType)
{
//Extract data from customer object and generate the report
if(reportType.equalsIgnoreCase("CSV"))
{
System.out.println("Generate CSV report");
}
if(reportType.equalsIgnoreCase("XML"))
{
System.out.println("Generate XML report");
}
}
}
正如我们现在可以看到的,如果我们需要在账单计算中更改任何内容,我们不需要修改客户类,我们将在Billcalculator类中进行更改。
同样,如果要添加另一个报告类型,则需要在ReportGenerator类而不是客户类中进行更改。

