### 设计模式习题解析:从简单工厂模式到组合模式 #### 一、女娲造人(简单工厂模式) **题目解析**: 本题要求使用简单工厂模式来模拟女娲造人的过程。在这个过程中,传入不同的参数可以得到不同类型的人(如男性、女性或机器人)。在现有基础上增加了一个新的类别——`Robot`类,当传入参数为“R”时,应返回一个`Robot`对象。 **设计方案**: 1. **接口设计**:首先定义一个公共接口`Person`,该接口可以包含所有人类共有的行为和属性。 ```java public interface Person { void show(); } ``` 2. **实现类**:根据需求,我们需要定义三个实现`Person`接口的具体类:`Man`类、`Woman`类以及新增的`Robot`类。每个类都需要实现`show`方法,以展示各自的特征。 ```java public class Man implements Person { @Override public void show() { System.out.println("这是一个男人"); } } public class Woman implements Person { @Override public void show() { System.out.println("这是一个女人"); } } public class Robot implements Person { @Override public void show() { System.out.println("这是一个机器人"); } } ``` 3. **工厂类**:定义一个`NvwaFactory`(女娲工厂)类,用于根据传入的不同参数创建相应类型的对象。 ```java public class NvwaFactory { public static Person createPerson(String type) { if ("M".equals(type)) { return new Man(); } else if ("W".equals(type)) { return new Woman(); } else if ("R".equals(type)) { return new Robot(); } else { throw new IllegalArgumentException("Invalid type: " + type); } } } ``` 4. **测试类**:我们编写一个测试类`Test`来验证工厂类是否能正确地创建不同类型的对象。 ```java public class Test { public static void main(String[] args) { Person man = NvwaFactory.createPerson("M"); man.show(); Person woman = NvwaFactory.createPerson("W"); woman.show(); Person robot = NvwaFactory.createPerson("R"); robot.show(); } } ``` #### 二、图片格式(工厂方法模式) **题目解析**: 本题的目标是设计一个程序,能够读取不同类型的图片格式,如GIF和JPG等。为了实现这一目标,我们将使用工厂方法模式。具体来说,我们需要为每种图片格式设计一个图片读取器类,并通过一个抽象的工厂类来创建这些读取器对象。 **设计方案**: 1. **抽象图片读取器类**:定义一个抽象类`ImageReader`,其中包含一个抽象方法`readImage()`用于读取图片。 ```java public abstract class ImageReader { public abstract void readImage(); } ``` 2. **具体图片读取器类**:定义具体的图片读取器类`GifReader`和`JpgReader`,它们分别实现`ImageReader`抽象类。 ```java public class GifReader extends ImageReader { @Override public void readImage() { System.out.println("Reading a GIF image..."); } } public class JpgReader extends ImageReader { @Override public void readImage() { System.out.println("Reading a JPG image..."); } } ``` 3. **抽象工厂类**:定义一个抽象工厂类`ImageReaderFactory`,其中包含一个抽象工厂方法`createImageReader()`用于创建图片读取器对象。 ```java public abstract class ImageReaderFactory { public abstract ImageReader createImageReader(); } ``` 4. **具体工厂类**:定义具体的工厂类`GifReaderFactory`和`JpgReaderFactory`,它们分别继承`ImageReaderFactory`,并实现`createImageReader()`方法来创建具体的图片读取器对象。 ```java public class GifReaderFactory extends ImageReaderFactory { @Override public ImageReader createImageReader() { return new GifReader(); } } public class JpgReaderFactory extends ImageReaderFactory { @Override public ImageReader createImageReader() { return new JpgReader(); } } ``` 5. **测试与应用**:通过`ImageReaderFactory`来创建具体的图片读取器对象,并调用`readImage()`方法读取图片。 ```java public class Test { public static void main(String[] args) { ImageReader gifReader = new GifReaderFactory().createImageReader(); gifReader.readImage(); ImageReader jpgReader = new JpgReaderFactory().createImageReader(); jpgReader.readImage(); } } ``` #### 三、抽象工厂模式 **题目解析**: 本题要求使用抽象工厂模式来创建计算机设备(如内存、CPU等)。我们需要设计一个系统,可以根据不同的品牌创建相应的硬件组件。 **设计方案**: 1. **定义产品接口**:首先定义产品接口`CPU`和`RAM`,以及相应的实现类`PcCPU`、`MacCpu`、`PcRAM`和`MacRAM`。 ```java public interface CPU { void show(); } public class PcCPU implements CPU { @Override public void show() { System.out.println("PCCPU"); } } public class MacCpu implements CPU { @Override public void show() { System.out.println("MacCPU"); } } public interface RAM { void show(); } public class PcRAM implements RAM { @Override public void show() { System.out.println("PCRAM"); } } public class MacRAM implements RAM { @Override public void show() { System.out.println("MacRAM"); } } ``` 2. **定义抽象工厂接口**:定义一个抽象工厂接口`AbstractFactory`,其中包含两个方法`getRAM()`和`getCPU()`。 ```java public interface AbstractFactory { RAM getRAM(); CPU getCPU(); } ``` 3. **实现具体工厂**:实现具体工厂`PcFactory`和`MacFactory`,它们分别实现了`AbstractFactory`接口。 ```java public class PcFactory implements AbstractFactory { @Override public RAM getRAM() { return new PcRAM(); } @Override public CPU getCPU() { return new PcCPU(); } } public class MacFactory implements AbstractFactory { @Override public RAM getRAM() { return new MacRAM(); } @Override public CPU getCPU() { return new MacCpu(); } } ``` 4. **测试类**:我们编写一个测试类`Test`来验证抽象工厂模式的正确性。 ```java public class Test { public static void main(String[] args) { AbstractFactory pcFactory = new PcFactory(); CPU pcCpu = pcFactory.getCPU(); RAM pcRam = pcFactory.getRAM(); pcCpu.show(); pcRam.show(); AbstractFactory macFactory = new MacFactory(); CPU macCpu = macFactory.getCPU(); RAM macRam = macFactory.getRAM(); macCpu.show(); macRam.show(); } } ``` 以上三个设计模式的例子覆盖了简单工厂模式、工厂方法模式和抽象工厂模式,通过这些例子,我们可以更好地理解这些模式的应用场景和实现方式。
剩余19页未读,继续阅读
- 粉丝: 94
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【无人机】四旋翼飞行器目标分配、全局路径规划和局部路径规划附Matlab代码.rar
- 【无人机三维路径规划】基于PSO无人机路径规划3D城市附Matlab代码.rar
- 【无人机路径规划】粒子群优化和遗传算法实现有效的水陆两栖无人机任务规划和执行Matlab实现.rar
- 基于mediapipe和KNN分类算法的健身计数器引体向上-深蹲-俯卧撑计数器源码+项目文档说明.zip
- 【无人机路径规划】用于无人机路径规划的多目标 PSO实现Matlab代码.rar
- 【无线传感器】基于 Mamdani 模糊推理系统改进无线传感器网络路由和数据包传递附Matlab代码.rar
- 【物理应用】基于Matlab计算并绘制一维量子和经典谐振子的波函数和概率分布.rar
- 【物理应用】使用提升算子计算量子谐振子的激发态研究附Matlab代码.rar
- 【物理】弹簧-质量-阻尼器系统行为分析附Matlab代码.rar
- 【物理应用】基于Zernike 多项式在圆形、六边形、椭圆形、矩形或环形瞳孔上应用Matlab代码实现.rar
- 【物理应用】基于物理场的动态模式分解(piDMD)研究附Matlab代码.rar
- 【信号处理】天线分集与空时编码技术——空时格码matlab代码.rar
- 【信道估计】基于鲸鱼优化算法的5G信道估计Matlab代码.rar
- 【物流选址】基于免疫优化算法的物流配送中心选址规划研究Matlab实现.rar
- proteus图,重庆邮电大学,单片机实验
- 【信号去噪】基于马氏距离和EDF统计IEE-TSP小波的多元信号去噪方法研究附Matlab代码.rar