我今天早些时候问了一个类似的问题,但现在我被告知要求已经改变。
我有 3 个课程 - Product
,ProductOffering
(PO)和ProductOfferingLists
(POL)。产品包含 PO,PO 包含 POL。所有这些类都扩展了一个名为 CMS 的抽象类。
我想将 PO 附加到 P,并将 POL 附加到 PO,但我正在寻找一种可重用的方法,因为除了类名之外,逻辑是相同的。
不幸的是,我的测试器类需要两个方法,而层次类需要强制转换来实现抽象 CMS 契约。
这让我发疯了。我怎样才能使它更可重用,所以我没有多种方法和铸造?
package puzzler;
import java.util.ArrayList;
import java.util.List;
public class Tester {
public static void main(String[] args) {
Product p = new Product();
PO pa = new PO();
POL po = new POL();
List<PO> lpa = new ArrayList<PO>();
List<POL> lpo = new ArrayList<POL>();
attachChildToParent(lpa, p);
attachChildToParent(lpo, pa);
}
static void attachChildToParent(List<PO> listChild, Product parent) {
for (PO po : listChild) {
parent.attach(po);
}
}
static void attachChildToParent(List<POL> listChild, PO parent) {
for (POL po : listChild) {
parent.attach(po);
}
}
}
CMS 类:
package puzzler;
abstract class CMS {
abstract void attach(CMS childNode);
}
产品类 - 拥有 PO 的层次结构的顶部:
package puzzler;
import java.util.List;
public class Product extends CMS {
List<PO> lpo;
public List<PO> getLpo() {
return lpo;
}
public void setLpo(List<PO> lpo) {
this.lpo = lpo;
}
@Override
void attach(CMS childNode) {
this.getLpo().add((PO)childNode);
}
}
产品提供,由产品拥有,反过来又拥有一个产品提供列表
package puzzler;
import java.util.List;
public class PO extends CMS {
List<POL> lpol;
public List<POL> getLpo() {
return lpol;
}
public void setLpo(List<POL> lpol) {
this.lpol = lpol;
}
@Override
void attach(CMS childNode) {
this.getLpo().add((POL)childNode);
}
}
PO 拥有的产品提供列表 (POL)
package puzzler;
public class POL extends CMS {
@Override
void attach(CMS childNode) {
throw new UnsupportedOperationException("Not supported yet.");
}
}