### 设计模式习题解析:从简单工厂模式到组合模式 #### 一、女娲造人(简单工厂模式) **题目解析**: 本题要求使用简单工厂模式来模拟女娲造人的过程。在这个过程中,传入不同的参数可以得到不同类型的人(如男性、女性或机器人)。在现有基础上增加了一个新的类别——`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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip