直接看code
public abstract class File {
private String name;
public File(String name) {
this.name = name;
}
//操作方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void watch();
//组合方法
public void add(File file) {
throw new UnsupportedOperationException();
}
public void remove(File file) {
throw new UnsupportedOperationException();
}
public File getChild(int position) {
throw new UnsupportedOperationException();
}
}
public class TextFile extends File {
public TextFile(String name) {
super(name);
}
@Override
public void watch() {
System.out.printf("组合模式", "这是一个叫" + getName() + "文本文件");
}
}
public class Folder extends File {
private List<File> mFileList;
public Folder(String name) {
super(name);
mFileList = new ArrayList<>();
}
@Override
public void watch() {
StringBuffer fileName = new StringBuffer();
for (File file : mFileList) {
fileName.append(file.getName() + ";");
}
System.out.printf("组合模式", "这是一个叫" + getName() + "文件夹,包含" + mFileList.size() + "个文件,分别是:" + fileName);
}
@Override
public void add(File file) {
mFileList.add(file);
}
@Override
public void remove(File file) {
mFileList.remove(file);
}
@Override
public File getChild(int position) {
return mFileList.get(position);
}
}
测试代码
public class testComposite {
public static void main(String[] strings) {
TextFile textFileA = new TextFile("a.txt");
TextFile textFileB = new TextFile("b.txt");
TextFile textFileC = new TextFile("c.txt");
textFileA.watch();
// textFileA.add(textFileB);//调用会抛我们在抽象接口中写的异常
Folder folder = new Folder("学习资料");
folder.add(textFileA);
folder.add(textFileB);
folder.add(textFileC);
folder.watch();
folder.getChild(1).watch();
}
}
在android中的使用
ViewGroup 是抽象类
最重要的是 那俩接口
public abstract class ViewGroup extends View implements ViewParent, ViewManager {
}
先看 ViewMangaer
public interface ViewManager
{
public void addView(View view, ViewGroup.LayoutParams params);
public void updateViewLayout(View view, ViewGroup.LayoutParams params);
public void removeView(View view);
}
再看 viewParent
public interface ViewParent {
public void requestLayout();//并不是立即执行的,有一段时间的,因为是以发送消息的形式
public boolean isLayoutRequested();//所以就有这方法
public ViewParent getParent();
}
View 的 onlayout 是空方法
ViewGroup 的 onlayout 是 abstract的
组合模式,其实不太多。