软件设计模式:工厂方法模式实现画板软件
题目描述:
设计一个简单的画板软件,要求实现以下功能:
- 可以绘制直线、矩形、圆形等基本图形。
- 可以选择不同的颜色、线宽和填充模式。
- 可以对已绘制的图形进行移动、旋转和缩放。
- 可以撤销和恢复操作。
- 可以保存和加载绘制的图形。
要求使用工厂方法模式完成结构图的实现和代码实现。
解题思路:
- 首先我们需要定义一个抽象工厂类,用于创建各种图形和操作对象。
- 然后我们根据题目要求,设计出具体的工厂类,如直线工厂、矩形工厂、圆形工厂、颜色工厂、线宽工厂、填充模式工厂、移动操作工厂、旋转操作工厂、缩放操作工厂等。
- 在每个工厂类中,我们需要定义具体的产品类,如直线类、矩形类、圆形类、颜色类、线宽类、填充模式类、移动操作类、旋转操作类、缩放操作类等。
- 最后,我们需要定义一个客户端类,用于调用各个工厂类来创建图形和操作对象,并实现绘制、移动、旋转、缩放、保存和加载等功能。
代码实现:
抽象工厂类:
public abstract class ShapeFactory {
public abstract Shape createShape();
}
具体工厂类:
public class LineFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Line();
}
}
public class RectFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Rect();
}
}
public class CircleFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
public class ColorFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Color();
}
}
public class LineWidthFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new LineWidth();
}
}
public class FillFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Fill();
}
}
public class MoveFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Move();
}
}
public class RotateFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Rotate();
}
}
public class ScaleFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Scale();
}
}
抽象产品类:
public abstract class Shape {
public abstract void draw();
}
具体产品类:
public class Line extends Shape {
@Override
public void draw() {
System.out.println('绘制直线');
}
}
public class Rect extends Shape {
@Override
public void draw() {
System.out.println('绘制矩形');
}
}
public class Circle extends Shape {
@Override
public void draw() {
System.out.println('绘制圆形');
}
}
public class Color extends Shape {
@Override
public void draw() {
System.out.println('选择颜色');
}
}
public class LineWidth extends Shape {
@Override
public void draw() {
System.out.println('选择线宽');
}
}
public class Fill extends Shape {
@Override
public void draw() {
System.out.println('选择填充模式');
}
}
public class Move extends Shape {
@Override
public void draw() {
System.out.println('移动图形');
}
}
public class Rotate extends Shape {
@Override
public void draw() {
System.out.println('旋转图形');
}
}
public class Scale extends Shape {
@Override
public void draw() {
System.out.println('缩放图形');
}
}
客户端类:
public class Client {
public static void main(String[] args) {
// 创建直线工厂
ShapeFactory lineFactory = new LineFactory();
// 创建直线对象
Shape line = lineFactory.createShape();
// 绘制直线
line.draw();
// 创建矩形工厂
ShapeFactory rectFactory = new RectFactory();
// 创建矩形对象
Shape rect = rectFactory.createShape();
// 绘制矩形
rect.draw();
// 创建圆形工厂
ShapeFactory circleFactory = new CircleFactory();
// 创建圆形对象
Shape circle = circleFactory.createShape();
// 绘制圆形
circle.draw();
// 创建颜色工厂
ShapeFactory colorFactory = new ColorFactory();
// 创建颜色对象
Shape color = colorFactory.createShape();
// 选择颜色
color.draw();
// 创建线宽工厂
ShapeFactory lineWidthFactory = new LineWidthFactory();
// 创建线宽对象
Shape lineWidth = lineWidthFactory.createShape();
// 选择线宽
lineWidth.draw();
// 创建填充模式工厂
ShapeFactory fillFactory = new FillFactory();
// 创建填充模式对象
Shape fill = fillFactory.createShape();
// 选择填充模式
fill.draw();
// 创建移动操作工厂
ShapeFactory moveFactory = new MoveFactory();
// 创建移动操作对象
Shape move = moveFactory.createShape();
// 移动图形
move.draw();
// 创建旋转操作工厂
ShapeFactory rotateFactory = new RotateFactory();
// 创建旋转操作对象
Shape rotate = rotateFactory.createShape();
// 旋转图形
rotate.draw();
// 创建缩放操作工厂
ShapeFactory scaleFactory = new ScaleFactory();
// 创建缩放操作对象
Shape scale = scaleFactory.createShape();
// 缩放图形
scale.draw();
}
}
原文地址: https://www.cveoy.top/t/topic/nQbp 著作权归作者所有。请勿转载和采集!