java中组合怎么用_使用Java中的组合和接口进行设计

我认为你必须避免一般的制定者.如果可以,请使用不可变对象,并将其私有数据初始化为其构造函数.

为了区分动物,我使用了另一种模式,即访客模式.它很冗长,但您不必直接测试您正在处理的动物.

public class Animals {

private Animals() {

}

interface Animal {

void accept(final AnimalProcessor visitor);

}

interface AnimalProcessor {

void visitTailed(final TailedAnimal tailedAnimal);

void visitHorned(final HornedAnimal hornedAnimal);

}

interface TailedAnimal extends Animal {

void moveTail();

}

interface HornedAnimal extends Animal {

void hitWithHorns();

}

static class Dog implements TailedAnimal {

public void moveTail() {

//To change body of implemented methods use File | Settings | File Templates.

}

public void accept(final AnimalProcessor visitor) {

visitor.visitTailed(this);

}

}

static class Cat implements TailedAnimal {

public void moveTail() {

//To change body of implemented methods use File | Settings | File Templates.

}

public void accept(final AnimalProcessor visitor) {

visitor.visitTailed(this);

}

}

static class Ram implements HornedAnimal {

public void hitWithHorns() {

//To change body of implemented methods use File | Settings | File Templates.

}

public void accept(final AnimalProcessor visitor) {

visitor.visitHorned(this);

}

}

static class Rhinoceros implements HornedAnimal, TailedAnimal {

public void hitWithHorns() {

//To change body of implemented methods use File | Settings | File Templates.

}

public void moveTail() {

//To change body of implemented methods use File | Settings | File Templates.

}

public void accept(final AnimalProcessor visitor) {

visitor.visitTailed(this);

visitor.visitHorned(this);

}

}

public static void main(String[] args) {

Collection animals = new ArrayList(Arrays.asList(new Dog(), new Cat(), new Rhinoceros()));

for (final Animal animal : animals) {

animal.accept(new AnimalProcessor() {

public void visitTailed(final TailedAnimal tailedAnimal) {

// you do what you want when it's a tailed animal

}

public void visitHorned(final HornedAnimal hornedAnimal) {

// you do what you want when it's a horned animal

}

});

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值