问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

软件系统设计与体系结构——实验八、创建型设计模式

创作时间:
作者:
@小白创作中心

软件系统设计与体系结构——实验八、创建型设计模式

引用
CSDN
1.
https://m.blog.csdn.net/jianguosongzi/article/details/145342366

实验目的

掌握创建型设计模式的原则、方法和技巧。

实验内容及步骤

实验内容1:简单工厂模式

  1. UML类图

  1. 代码实现

(1) Shape 接口:

public interface Shape {
    void draw();
    void erase();
}

(2) UnsupportedShapeException 自定义异常:

public class UnsupportedShapeException extends Exception {
    public UnsupportedShapeException(String message) {
        super(message);
    }
}

(3) ShapeFactory 工厂类:

public class ShapeFactory {
    public Shape getShape(String shapeType) throws UnsupportedShapeException {
        if (shapeType == null) {
            throw new UnsupportedShapeException("Shape type cannot be null.");
        }
        switch (shapeType.toLowerCase()) {
            case "circle":
                return new Circle();
            case "rectangle":
                return new Rectangle();
            case "triangle":
                return new Triangle();
            default:
                throw new UnsupportedShapeException("Unsupported shape type: " + shapeType);
        }
    }

    public Circle getCircle() {
        return new Circle();
    }
}

(4) Circle 类:

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
    @Override
    public void erase() {
        System.out.println("Erasing a circle.");
    }
}

(5) Rectangle 类:

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle.");
    }
    @Override
    public void erase() {
        System.out.println("Erasing a rectangle.");
    }
}

(6) Triangle 类:

public class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a triangle.");
    }
    @Override
    public void erase() {
        System.out.println("Erasing a triangle.");
    }
}
  1. 相关解释

在这个设计中,ShapeFactory负责根据传入的类型字符串创建相应的Shape对象。如果传入的类型不支持,则抛出UnsupportedShapeException异常。每个具体的Shape类实现了draw()erase()方法,以执行相应的绘制和擦除操作。这样的设计使得添加新的几何形状变得简单,只需添加新的类实现Shape接口,并在ShapeFactory中添加相应的逻辑即可。

实验内容2:抽象工厂模式

  1. UML类图

  1. 代码实现

(1) Bicycle 抽象产品类:

public abstract class Bicycle {
    public abstract void ride();
}

(2) AIMABicycle 具体产品类:

public class AIMABicycle extends Bicycle {
    @Override
    public void ride() {
        System.out.println("ride an AIMA bicycle.");
    }
}

(3) YadeaBicycle 具体产品类:

public class YadeaBicycle extends Bicycle {
    @Override
    public void ride() {
        System.out.println("ride a Yadea bicycle.");
    }
}

(4) TAILGBicycle 具体产品类:

public class TAILGBicycle extends Bicycle {
    @Override
    public void ride() {
        System.out.println("ride a TAILG bicycle.");
    }
}

(5) BicycleFactory 抽象工厂类:

public abstract class BicycleFactory {
    public abstract Bicycle createBicycle();
}

(6) AIMAFactory 具体工厂类:

public class AIMAFactory extends BicycleFactory {
    @Override
    public Bicycle createBicycle() {
        return new AIMABicycle();
    }
}

(7) YadeaFactory 具体工厂类:

public class YadeaFactory extends BicycleFactory {
    @Override
    public Bicycle createBicycle() {
        return new YadeaBicycle();
    }
}

(8) TAILGFactory 具体工厂类:

public class TAILGFactory extends BicycleFactory {
    @Override
    public Bicycle createBicycle() {
        return new TAILGBicycle();
    }
}
  1. 相关解释

(1) BicycleFactory 抽象工厂类:定义了一个创建电动自行车的接口(抽象方法),每个具体的工厂都需要实现这个方法。

(2) AIMAFactory 具体工厂类:这个类是BicycleFactory的一个子类,专门负责生产爱玛牌电动自行车。

(3) YadeaFactory 具体工厂类:这个类是BicycleFactory的一个子类,专门负责生产雅迪牌电动自行车。

(4) TAILGFactory 具体工厂类:这个类也是BicycleFactory的一个子类,专门负责生产台铃牌电动自行车。

(5) Bicycle 抽象产品类:定义了电动自行车的公共接口,所有品牌的电动自行车都需要实现这个接口。

(6) AIMABicycle 具体产品类:实现了Bicycle接口,代表爱玛牌电动自行车。

(7) YadeaBicycle 具体产品类:实现了Bicycle接口,代表雅迪牌电动自行车。

(8) TAILGBicycle 具体产品类:实现了Bicycle接口,代表台铃牌电动自行车。

在这个设计中,如果需要添加一个新的电动自行车品牌,只需要创建一个新的具体工厂类和对应的具体产品类,而不需要修改现有的代码。这符合开闭原则,即对扩展开放,对修改封闭。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号