一:图
安全的:树枝树叶方法不一样,仅树枝有操作树叶的方法
透明的:树枝树叶方法一样
不管你们觉不觉得,反正我觉得好多名词起的非常蛋疼!
二:透明的
接口:
package composite;
public interface I {
void add(I i);
void remove(I i);
void say();
}
树叶:
package composite;
public class A implements I {
private String name;
@Override
public void add(I i) {
// TODO Auto-generated method stub
return ;
}
@Override
public void remove(I i) {
// TODO Auto-generated method stub
return ;
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println(this.name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
树枝:
package composite;
import java.util.List;
import java.util.Vector;
public class B implements I {
private String name;
private Vector v = new Vector();
@Override
public void add(I i) {
// TODO Auto-generated method stub
v.add(i);
}
@Override
public void remove(I i) {
// TODO Auto-generated method stub
v.remove(v);
}
@Override
public void say() {
if(v.isEmpty()){
System.out.println(this.getName()+"无元素");
return;
}else{
System.out.println(this.getName());
for(I i : v){
i.say();
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
三:安全的
接口:
package composite;
public interface IFace {
void say();
}
树枝:
package composite;
import java.util.Vector;
public class D implements IFace {
private Vector v = new Vector();
private String name;
public D(String name) {
this.name = name;
}
@Override
public void say() {
System.out.println(this.name);
if(v.isEmpty()){
return;
}else {
for(IFace i : v){
i.say();
}
}
}
public void add(IFace i){
this.v.add(i);
}
public void remove(IFace i){
this.v.remove(i);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
树叶:
package composite;
public class C implements IFace {
private String name;
public C(String name) {
this.name = name;
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println(this.name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}