题目描述:

设计一个简单的画板软件,要求实现以下功能:

  1. 可以绘制直线、矩形、圆形等基本图形。
  2. 可以选择不同的颜色、线宽和填充模式。
  3. 可以对已绘制的图形进行移动、旋转和缩放。
  4. 可以撤销和恢复操作。
  5. 可以保存和加载绘制的图形。

要求使用工厂方法模式完成结构图的实现和代码实现。

解题思路:

  1. 首先我们需要定义一个抽象工厂类,用于创建各种图形和操作对象。
  2. 然后我们根据题目要求,设计出具体的工厂类,如直线工厂、矩形工厂、圆形工厂、颜色工厂、线宽工厂、填充模式工厂、移动操作工厂、旋转操作工厂、缩放操作工厂等。
  3. 在每个工厂类中,我们需要定义具体的产品类,如直线类、矩形类、圆形类、颜色类、线宽类、填充模式类、移动操作类、旋转操作类、缩放操作类等。
  4. 最后,我们需要定义一个客户端类,用于调用各个工厂类来创建图形和操作对象,并实现绘制、移动、旋转、缩放、保存和加载等功能。

代码实现:

抽象工厂类:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录