设计模式 实验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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通