java - Java中类设计的最佳方式: An example

标签 java class class-design

以下问题描述的最佳设计是:

一名“学生”有4支笔,颜色为蓝色红色绿色橙色

这是 Pen 类 -

Class Pen{
  String color;
  //Getters & setters
  public write(){
    // Write some thing using color
  }

}

第一种方法:

Class Studend{
//Here pens are stored in a HashMap with its Color as Key
 Map<String,Pen> pens = new HashMap<String,Pen>();

 Public Student(Pen p){
   pens.put(p.getColor(),p);//Just an example
 }
 //more code here....

}

第二种方式:

Class Student{
  Pen bluePen;
  Pen greenPen;
  Pen redPen;
  Pen orangePen; 
  //Here all the pens are made as class variables.    

   //Getters and Setters...
}

注意:我需要能够迭代所有笔并执行一些常见操作,例如

for(Pen pen: pens){ 
  pen.write();
}

第一种方式更容易。

此外,需要单独访问 Pen,例如 student.getRedPen();,这可以通过第二种方式轻松完成。但在第一种方式中,我每次都需要这样做

 if(student.getPens().containsKey("Red")){ 
  Pen redPen = student.getPens().get("Red");
   //some more code here
 }

哪个更好?还有其他更好的方法来实现这一目标吗?

提前致谢!!

最佳答案

这是一个原型(prototype)。您可以添加您需要的任何其他方法:

public class Student {

private List<Pen> pens = new ArrayList<Pen>();

// Constructor + methods
}

public class Pen {

public enum Color {
    RED, BLUE, GREEN, ORANGE;
}

private Color color;

public Pen(Color color) {
    this.color = color;
}

// Getters & setters
public void write() {
    // Write some thing using color
}

}

关于java - Java中类设计的最佳方式: An example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130817/

相关文章:

c++ - C++的类图

c++ - 多态性还是属性字典?

design-patterns - 将算法封装到一个类中

java - 这还是多态吗?

oop - 在两个不相关的类中使用相同的方法 - 减少重复

class - 在 VBA 中使用自定义数据类型

css - 如果元素选择器变量为真,AngularJS 添加 css 类

java - Java中的switch语句可以使用 "view"作为参数吗?

java - 尝试将 admob 合并到我的 android 应用程序时出错

java - 数组堆栈中的值应该被取消引用吗?