酷代码 AI
菜单
服务商

在该图形库中,每个图形类(如circle、triangle等)的init(方法用于初始化所创建的图形,setcolor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setsize()方法用于设置图形的大小,display()方法用于显示图形。← 客户类(client)在使用该图形库时发现存在如下问题: 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码: ②在图形库中增加并使用新的图形时需要修改客户类源代码; ③客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。 现需要根据面向对象设计原则对该系统进行重构,要求如下: ①隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名: ②客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。java 使用简单工厂模式和工厂方法模式对系统进行重构。

以下是使用简单工厂模式和工厂方法模式对上述系统进行重构的 Java 代码示例: 简单工厂模式: ```java interface Shape { void setColor(String color); void fill(String color); void setSize(int size); void display(); } class Circle implements Shape { // 具体实现 Circle 类的方法 @Override public void setColor(String color) { System.out.println("设置 Circle 的边框颜色: " + color); } @Override public void fill(String color) { System.out.println("填充 Circle 的颜色: " + color); } @Override public void setSize(int size) { System.out.println("设置 Circle 的大小: " + size); } @Override public void display() { System.out.println("显示 Circle"); } } class Triangle implements Shape { // 具体实现 Triangle 类的方法 @Override public void setColor(String color) { System.out.println("设置 Triangle 的边框颜色: " + color); } @Override public void fill(String color) { System.out.println("填充 Triangle 的颜色: " + color); } @Override public void setSize(int size) { System.out.println("设置 Triangle 的大小: " + size); } @Override public void display() { System.out.println("显示 Triangle"); } } class ShapeFactory { public Shape createShape(String type) { if ("circle".equalsIgnoreCase(type)) { return new Circle(); } else if ("triangle".equalsIgnoreCase(type)) { return new Triangle(); } return null; } } class Client { public static void main(String[] args) { ShapeFactory factory = new ShapeFactory(); Shape shape = factory.createShape("circle"); shape.setColor("red"); shape.fill("blue"); shape.setSize(10); shape.display(); } } ``` 工厂方法模式: ```java interface Shape { void setColor(String color); void fill(String color); void setSize(int size); void display(); } class Circle implements Shape { // 具体实现 Circle 类的方法 @Override public void setColor(String color) { System.out.println("设置 Circle 的边框颜色: " + color); } @Override public void fill(String color) { System.out.println("填充 Circle 的颜色: " + color); } @Override public void setSize(int size) { System.out.println("设置 Circle 的大小: " + size); } @Override public void display() { System.out.println("显示 Circle"); } } class Triangle implements Shape { // 具体实现 Triangle 类的方法 @Override public void setColor(String color) { System.out.println("设置 Triangle 的边框颜色: " + color); } @Override public void fill(String color) { System.out.println("填充 Triangle 的颜色: " + color); } @Override public void setSize(int size) { System.out.println("设置 Triangle 的大小: " + size); } @Override public void display() { System.out.println("显示 Triangle"); } } abstract class AbstractShapeFactory { abstract Shape createShape(); } class CircleFactory extends AbstractShapeFactory { @Override Shape createShape() { return new Circle(); } } class TriangleFactory extends AbstractShapeFactory { @Override Shape createShape() { return new Triangle(); } } class Client { public static void main(String[] args) { AbstractShapeFactory factory = new CircleFactory(); Shape shape = factory.createShape(); shape.setColor("red"); shape.fill("blue"); shape.setSize(10); shape.display(); } } ``` 在上述代码中,简单工厂模式通过一个 `ShapeFactory` 类来根据传入的类型创建相应的图形对象;工厂方法模式则通过抽象工厂类 `AbstractShapeFactory` 及其具体的工厂子类(如 `CircleFactory` 和 `TriangleFactory`)来创建对应的图形对象。这样就实现了图形创建和使用的隔离,符合开闭原则,方便了图形的更换和新增。 [2024-10-10 16:22:29 | AI写代码神器 | 1032点数解答]

相关提问
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]