【问题标题】:Applying SRP and OCP应用 SRP 和 OCP
【发布时间】:2020-07-04 10:57:04
【问题描述】:

我一直在尝试将 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();
        }
    }

【问题讨论】:

    标签: java eclipse single-responsibility-principle appointment open-closed-principle


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多