正在执行decorator Java程序.为什么它显示出不匹配



我有一个关于我正在为学校做的项目的问题。我必须做以下事情:

编写一个Java程序,该程序使用decorator类来添加功能员工。在典型的公司中,员工会被要求履行多项职责,如安全部门负责人协调员、招聘人员或社区联络人。你应该除了这些之外还有其他的。您的Java程序将创建Employees然后在运行时对这些员工进行装饰。

创建一个名为Employee的抽象类,其姓氏和description字段和getDescription()方法。创建混凝土名为SalariedEmployee的类,该类扩展了Employee。创建摘要名为ResponsibilityDecorator的类,该类能够装饰employee,并将该员工的责任作为字符串返回。它会有一个抽象的getDescription方法。创建一些职务类别扩展ResponsibilityDecorator类并实现getDescription()方法。

在主测试程序中,创建至少5个Employee对象并通过它们传递给每个decorator类的构造函数。第一个员工应该是您,所以请使用您的姓氏。然后,打印每个通过调用其getDescription()方法调用Employee。所有员工应没有相同数量的责任。程序的输出每个都应该看起来像这样:

[姓氏]:经理、招聘人员、社区联络人、产品设计师

以下是我迄今为止所做的:

Employee.java:

import java.util.*;
public abstract class Employee 
{
String lastName, description;
public String getDescription()
{
return description;
}
}

带薪员工.java:

import java.util.*;
public abstract class SalariedEmployee extends Employee
{
String lastName, description;
public abstract String getDescription();
}

ResponsibilityDecorator.java:

import java.util.*;
public abstract class ResponsibilityDecorator
{
public String getDescription()
{
return employee.getDescription();
}
Employee employee;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public boolean equals(Object obj) {
return employee.equals(obj);
}
public int hashCode() {
return employee.hashCode();
}
public String toString() {
return employee.toString();
}
public ResponsibilityDecorator(Employee employee) {
super();
this.employee = employee;
}
public ResponsibilityDecorator() {
super();
// TODO Auto-generated constructor stub
}
}

Rodriguez.java(第一类员工)

import java.util.*;
public abstract class Rodriguez extends ResponsibilityDecorator 
{
Employee employee1;
String lastName = "Rodriguez";
String description = "Tech Support";
public Rodriguez (Employee employee1)
{
this.employee = employee;
}
public String getDescription()
{
return description;
}
}

Doe.java(第二类员工):

import java.util.*;
public abstract class Doe extends ResponsibilityDecorator 
{
Employee employee2;
String lastName = "Doe";
String description = "Security Guard, Police Officer";
public Doe (Employee employee2)
{
this.employee = employee;
}
public String getDescription()
{
return description;
}
}

Jill.java(第三个员工对象):

import java.util.*;
public abstract class Doe extends ResponsibilityDecorator 
{
Employee employee2;
String lastName = "Doe";
String description = "Security Guard, Police Officer";
public Doe (Employee employee2)
{
this.employee = employee;
}
public String getDescription()
{
return description;
}
}

Maria.java(第四级员工):

import java.util.*;
public abstract class Maria extends ResponsibilityDecorator
{
Employee employee4;
String lastName = "Maria";
String description = "Receptionist, Valet, Cashier, Restock";
public Maria (Employee employee4)
{
this.employee = employee;
}
public String getDescription()
{
return description;
}
}

James.java(第五个员工班):

import java.util.*;
public abstract class James extends ResponsibilityDecorator
{
Employee employee5;
String lastName = "James";
String description = "Manager, CEO, Economy, President, Analytics";
public James (Employee employee5)
{
this.employee = employee;
}
public String getDescription()
{
return description;
}
}

Test.java:

import java.util.*;
public class Test 
{
public static void main(String[] args)
{
Employee employee1 = new Rodriguez();
System.out.println("Rodriguez:" + 
employee1.getDescription());
Employee employee2 = new Doe();
System.out.println("Doe" + 
employee2.getDescription());
Employee employee3 = new Jill();
System.out.println("Jill:" + 
employee3.getDescription());
Employee employee4 = new Maria();
System.out.println("Maria:" + 
employee4.getDescription());
Employee employee5 = new James();
System.out.println("James:" + 
employee5.getDescription());
}
}

出于某种原因,它显示了一个类型不匹配错误。我一直在网上搜索,甚至问过一些人。我尝试了许多修复,但它们只是造成了另一个错误。我不知道如何解决这个问题。

这里似乎有几个问题。让我们浏览一下作业文本:

创建一个名为Employee的抽象类,包含姓氏和描述字段以及getDescription()方法。

这看起来不错

创建一个名为SalariedEmployee的具体类,该类扩展Employee。

您使SalariedEmployee成为一个抽象类。删除abstract并实现getDescription方法。

创建一个名为ResponsibilityDecorator的抽象类,该类能够装饰员工并将员工的责任作为字符串返回。它将有一个抽象的getDescription方法。

根据我熟悉的decorator模式,如果ResponsibilityDecorator应该"装饰员工",那么它应该扩展Employee——你学到了其他东西吗?

从任务的描述中,我希望看到:

abstract class ResponsibilityDecorator extends Employee {
Employee employee;
ResponsibilityDecorator(Employee e) { this.employee = e; }
abstract String getDescription();
}

创建一些作业类别类,这些类扩展了ResponsibilityDecorator类并实现了getDescription()方法。

除非您将Maria、Rodriguez等视为"工作类别",否则您没有这样做。

"经理"职位类别可能如下所示:

class Manager extends ResponsibilityDecorator {
Manager(Employee employee) { super(employee); }
String getDescription() { return employee.getDescription() + " Manager"; }
}

在主测试程序中,创建至少5个Employee对象

也许您混淆了上一步,创建了5个员工类(Maria,Rodriguez,…)?


请注意,此练习的解决方案会让专业开发人员挠头,因为这不是表示程序中工作类别或职责的合理方式。

您正在创建Employee类型对象的实例但根据您的代码,他们都没有关系,也不是Employee类的子级。

您定义了什么是Employee和Salary员工,但您的人员对象都没有扩展它们。

一些基本的OOP概念在代码中不匹配。
abstract class不能用于初始化(正如您所做的那样)
Employee employee1 = new Rodriguez();
行代码很好,但错误源自Rodriguez class
尝试使用以下内容更改类定义:
public class Rodriguez extends ResponsibilityDecorator
这不会解决问题,因为Rodriguez_ResponsibilityDecorator(类型)和Employee(类型)之间没有关系,但这是理解代码的又一步。(只有一个实例varEmployee嵌入在ResponsibilityDecorator上。它可以用来重新设计代码并用Employee建立链接,但我怀疑你是否会遵循这种模式


通常所有的employees都应该从Employee派生,然后适当的代码调整将是public class Rodriguez extends Employee。。。并且在代码应该被适配之后。(你应该从这里开始)。只要再看看图案就行了。

还有一个提示,正确的Name_Rodriguez不是一个适当的class def,它更像是一个实例的属性。例如:Employee e1 = new CustomEmployee("Rodriguez","last name", age_int)CustomEmployeeextends Employee。。。(员工可能是abstractinterface)

最新更新