这是一个简单的编程问题.我不是
Java专家.假设我使用自定义类Company和Employee的对象,方式类似于许多RDBMS示例所做的方式:
class Employee { Company company; } class Company { String name; }
我需要保证不同的Company对象具有唯一的名称 – 即没有两个这样的对象可能具有相同的名称,因为从我的角度来看它没有任何意义,也只是吃内存 – 如果两个员工在IBM工作,那么具有该名称的单个Company对象period.
我现在的想法是将公司构造函数设为私有 – 以便将具有任意名称的公司对象分配的工作委托给受信任的方法 – 假设这将拒绝任何后续尝试创建具有已存在名称的对象或返回现有或新对象(必要时创建一个).
问题是,我不知道如何优雅地完成这一任务.一件好事就是每次请求具有名称的Company对象时都不必进行O(n)查找 – 所以为了方便我可能会使用哈希映射或二叉树吗?我还想覆盖公司对象的识别方式 – 这导致我:我会覆盖Object.equals和/或Object.hashCode方法吗?
解决方法
看一下flyweight模式.
我会做的是:
// incomplete,but you get the idea hopefully CompanyFactory { private Map<String,Company> companies; public getCompany(final String name) { Company company; company = compaines.get(name); if(company == null) { company = new Company(name); companies.put(name,company); } return (company); } }