gpt4 book ai didi

java - 应用 SRP 和 OCP

转载 作者:行者123 更新时间:2023-12-01 17:49:03 25 4
gpt4 key购买 nike

我一直在尝试将 SRP 和 OCP 应用于此代码。该代码应允许银行员工预订或不预订硬编码预约。我不知道要创建哪些类来将这两个原则应用到代码中。我想知道我需要哪些类以及我应该应用的继承。


package gradedGroupProject.nonPrincipledDesign.v1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ORIGINAL {

public String name = "X";

public List<BankClient> bankClientsWithAppointments;
public List<Date> appointmentDates;

public static void main(String[] args) throws ParseException {

BankEmployee bankEmployee = new BankEmployee();

bankEmployee.bankClientsWithAppointments = new ArrayList<BankClient>();
bankEmployee.appointmentDates = new ArrayList<Date>();

BankClient bankClient1 = new BankClient("u1", "p1");
bankClient1.name = "A";
bankEmployee.bankClientsWithAppointments.add(bankClient1);
bankEmployee.appointmentDates.add(new SimpleDateFormat("dd/MM/yyyy").parse("20/12/2000"));

BankClient bankClient2 = new BankClient("u2", "p2");
bankClient2.name = "B";
bankEmployee.bankClientsWithAppointments.add(bankClient2);
bankEmployee.appointmentDates.add(new SimpleDateFormat("dd/MM/yyyy").parse("22/12/2000"));

print(bankEmployee.bankClientsWithAppointments);



for (int i = 0; i < bankEmployee.bankClientsWithAppointments.size(); ++i) {

Date date = bankEmployee.appointmentDates.get(i);
BankClient bankClient = bankEmployee.bankClientsWithAppointments.get(i);

System.out.println("\nCandidate date = " + date + " with client = " + bankClient.name);

System.out.println("1. Verify it");
System.out.println("2. Do not book it");
String choice = read("choice");

if (choice.equals("1"))
bankClient.bookAppointment(date, bankEmployee.name); // we assume that we answer with this call to the
// client.
System.out.println("Appointment Booked");
}
}

public static String read(String label) {

System.out.println("\nProvide your " + label + ":");

System.out.println(">");

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String value = null;

try {

value = input.readLine();
}

catch (IOException ex) {
ex.printStackTrace();
}

return value;
}

public static void print(List<BankClient> bankClients) {

for (int i = 0; bankClients != null && i < bankClients.size(); ++i)
bankClients.get(i).toPrint();
}
}

最佳答案

首先,您应该从数据实体中取出生成方法,并将它们移至其他一些类(以维护SR原则)。新类将是您的“迭代器”(知道如何执行某些任务)。

对于每个迭代器角色,您生成一个指定该角色“契约”的接口(interface),然后您可以对该接口(interface)有许多不同的实现。如果需要为该角色添加新的、不同的实现,则可以创建接口(interface)的新实现,从而避免修改当前代码(OCP 原则)

关于java - 应用 SRP 和 OCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60822709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com