美文网首页
组合模式

组合模式

作者: 刘尔泽 | 来源:发表于2017-10-15 15:56 被阅读11次

    直接看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的

    组合模式,其实不太多。

    相关文章

      网友评论

          本文标题:组合模式

          本文链接:https://www.haomeiwen.com/subject/jtlfuxtx.html