设计模式 实验10实验11

实验十组合模式

 

复制代码
package test10;

public abstract class FileSystem {
    protected String name;

    public FileSystem(String name) {
        this.name = name;
    }

    public abstract void display();
}
复制代码
复制代码
package test10;

public class File extends FileSystem{
    public File(String name) {
        super(name);
    }

    @Override
    public void display() {
        System.out.println("File: " + name);
    }
}
复制代码
复制代码
package test10;

import java.util.ArrayList;
import java.util.List;

public class Folder extends FileSystem{
    private List<FileSystem> children;

    public Folder(String name) {
        super(name);
        children = new ArrayList<>();
    }

    public void add(FileSystem component) {
        children.add(component);
    }

    public void remove(FileSystem component) {
        children.remove(component);
    }

    @Override
    public void display() {
        System.out.println("Folder: " + name);
        for (FileSystem component : children) {
            component.display();
        }
    }
}
复制代码
复制代码
package test10;

public class Main {
    public static void main(String[] args) {
        Folder root = new Folder("Root");
        Folder documents = new Folder("文本文件");
        Folder pictures = new Folder("图片");
        File document1 = new File("新建文档1.txt");
        File document2 = new File("单词1.txt");
        File picture1 = new File("风景.jpg");
        File picture2 = new File("名画.jpg");

        documents.add(document1);
        documents.add(document2);
        pictures.add(picture1);
        pictures.add(picture2);

        root.add(documents);
        root.add(pictures);

        root.display();
    }
}
复制代码

实验十一

复制代码
package test11;

public interface Phone {
    void receiveCall();
}


package test11;

public abstract class PhoneDecorator implements Phone {
    protected Phone decoratedPhone;

    public PhoneDecorator(Phone decoratedPhone) {
        this.decoratedPhone = decoratedPhone;
    }

    @Override
    public void receiveCall() {
        decoratedPhone.receiveCall();
    }
}
复制代码
复制代码
package test11;

public class JarPhone extends PhoneDecorator {
    public JarPhone(Phone decoratedPhone) {
        super(decoratedPhone);
    }

    @Override
    public void receiveCall() {
        super.receiveCall();
        System.out.println("升级为JarPhone: 铃声加震动提示用户");
    }
}


package test11;

public final class SimplePhone implements Phone {
    @Override
    public void receiveCall() {
        System.out.println("SimplePhone: 铃声提示");
    }
}


复制代码
复制代码
package test11;

public class ComplexPhone extends PhoneDecorator {
    public ComplexPhone(Phone decoratedPhone) {
        super(decoratedPhone);
    }

    @Override
    public void receiveCall() {
        super.receiveCall();
        System.out.println("升级为ComplexPhone: 铃声震动加闪烁提示");
    }
}
复制代码
复制代码
package test11;

public class Main {
    public static void main(String[] args) {
        // 创建简单手机
        Phone simplePhone = new SimplePhone();
        simplePhone.receiveCall();

        System.out.println();

        // 升级为振动手机
        Phone jarPhone = new JarPhone(simplePhone);
        jarPhone.receiveCall();

        System.out.println();

        // 升级为振动和闪光手机
        Phone complexPhone = new ComplexPhone(simplePhone);
        complexPhone.receiveCall();
    }
}
复制代码

 

posted @   一个小虎牙  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示