课时94:案例分析三(图形)

简介: 图形抽象类与工厂设计模式的定义与应用1.图形抽象类的定义2.具体图形子类的实现3.工厂设计模式的应用

课时94:案例分析三(图形)

 

摘要:图形抽象类与工厂设计模式的定义与应用

1.图形抽象类的定义

2.具体图形子类的实现

3.工厂设计模式的应用

 

01.图形抽象类的定义

 

定义类Shape。用表示一般二维图形。Shape具有抽象方法area和perimter,分别用来计算形状的面积和周长。试定义一些二维形状类(如矩形、三角形、圆形、椭圆形等),这些类均为Shape类的子类。


从图形设计的角度来看,“图形” 本身是一个抽象的概念,就如同 “行为” 一样,它没有具体的实例,但可以有各种具体的表现形式,如圆形、矩形等。因此,我们需要将 “图形” 定义为一个抽象类。

image.png

在 Java 中,定义抽象类时,我们使用Abstract关键字。以下是定义图形抽象类的示例代码:

abstract class AbstractShape {
    public abstract double area();    // 抽象方法:计算面积
    public abstract double perimeter();    // 抽象方法:计算周长
}

 

02.具体图形子类的实现

 

2.1圆形子类

圆形是一种常见的二维图形,它的面积和周长的计算依赖于半径。以下是圆形子类的实现代码:

class Circular extends AbstractShape {
    private double radius;
    public Circular(double radius) {
        this.radius = radius;
    }
    public double area() {
        return 3.1415926 * this.radius * this.radius;
    }
    public double perimeter() {
        return 2 * 3.1415926 * this.radius;
    }
}

在上述代码中,Circular类继承自Shape抽象类,并实现了area()和perimeter()方法。在area()方法中,我们使用Math.PI表示圆周率,通过公式π * r * r计算圆形的面积;在perimeter()方法中,使用公式2 * π * r计算圆形的周长。

 

2.2矩形子类

矩形也是一种常见的二维图形,它的面积和周长的计算依赖于长和宽。以下是矩形子类的实现代码:

class Rectangle extends AbstractShape {
    private double length;
    private double width;
    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }
    public double area() {
        return this.length * this.width;
    }
    public double perimeter() {
        return 2 * (this.length + this.width);
    }
}

在上述代码中,Rectangle类继承自Shape抽象类,并实现了area()和perimeter()方法。在area()方法中,通过公式长 * 宽计算矩形的面积;在perimeter()方法中,使用公式2 * (长 + 宽)计算矩形的周长。

 

03.工厂设计模式的应用

 

在实际编程中,为了隐藏对象创建的细节,提高代码的可维护性和灵活性,我们可以使用工厂设计模式。工厂设计模式的主要特点是将对象的创建和使用分离,通过一个工厂类来负责对象的创建。

以下是一个简单的图形工厂类的实现代码:

class Factory {
    public static AbstractShape getInstance(String className, double... args) {
        if ("Circular".equalsIgnoreCase(className)) {
            return new Circular(args[0]);
        } else if ("Rectangle".equalsIgnoreCase(className)) {
            return new Rectangle(args[0], args[1]);
        } else {
            return null;
        }
    }
}
public class JavaDemo {
    public static void main(String args[ ]) {
        AbstractShape asa = Factory.getInstance("Circular", 1.1);
        AbstractShape asb = Factory.getInstance("Rectangle", 1.5, 10.2);
        System.out.println("圆形面积:" + asa.area() + "、圆形周长:"+asa.perimeter());
        System.out.println("矩形面积:" + asb.area() + "、矩形周长:"+asb.perimeter());
 
    }
}

image.png

在上述代码中,我们通过 Factory 类的 getInstance()方法创建了一个圆形对象和一个矩形对象,并分别调用它们的area()和perimeter()方法计算面积和周长,最后将结果输出。


通过定义图形抽象类和具体的图形子类,并结合工厂设计模式,我们实现了对二维图形的有效管理和计算。抽象类为具体的图形子类提供了统一的接口,使得代码具有更好的可扩展性和可维护性;工厂设计模式隐藏了对象创建的细节,使得代码更加灵活和易于修改。


在实际编程中,我们可以根据需要添加更多的图形子类,并在工厂类中相应地添加创建对象的逻辑,从而实现对更多类型图形的支持。

相关文章
|
机器学习/深度学习 搜索推荐 算法
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
1698 0
计算机视觉教程6-1:图解双目视觉系统与立体校正原理
|
Java 开发工具 开发者
IDEA中配置类与方法注释模板
IDEA是当前使用最为广泛的集成开发工具之一,其功能的多样性与便捷性为开发者在开发过程提供了很多方便。 我们在用IDEA创建java类和方法的时候,可以自动生成文档注释,便于代码的阅读与理解。
4346 1
IDEA中配置类与方法注释模板
|
安全 物联网 网络安全
公网IP证书怎么申请?
在数字化时代,互联网通信的安全性日益重要。公网IP证书(IP SSL证书)通过加密技术保护数据传输,确保数据的保密性、完整性和身份验证。适用于物联网设备、API接口和远程服务器等场景,提升用户信任度和合规性。申请流程包括确认IP地址、选择服务商、生成CSR和私钥、提交申请并验证、接收安装证书及测试优化。
公网IP证书怎么申请?
|
编解码 监控 安全
提高电脑运行速度
提高电脑运行速度
839 7
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
|
人工智能 移动开发 前端开发
通义灵码使用实践场景、效果和心得。
作为一名H5前端开发学者,我在学习过程中借助通义灵码@workspace大幅提升了效率。通过自动推荐匹配的CSS样式和项目内相似模板的排版建议,减少了重复劳动,效率提高超过一倍。此外,它还能解析并翻译GitHub上的英文.md文件,如成功部署声音合成AI:GPT-SoVITS项目,极大便利了我的学习与开发工作。
755 4
|
数据库连接 程序员 C#
C#(WPF)连接SQLite数据库,利用ViewModel显示数据
对于入门c#(WPF)的初级程序猿
1977 0
C#(WPF)连接SQLite数据库,利用ViewModel显示数据
|
网络安全 数据安全/隐私保护 Shell
解决ssh登录后闲置时间过长而断开连接
解决ssh登录后闲置时间过长而断开连接 时我们通过终端连接服务器时,当鼠标和键盘长时间不操作,服务器就会自动断开连接,我们还的需要重新连接,感觉很麻烦,总结一下解决此问题的方法方法一、修改/etc/ssh/sshd_config配置文件,找到ClientAliveCountMax(单位为分钟)修改你想要的值,执行service sshd reload 方法二、找到所在用户的.
13326 1
|
机器学习/深度学习 测试技术 计算机视觉
注意力机制汇总,包括SE、CBAM、ECA等
注意力机制汇总,包括SE、CBAM、ECA等
3370 1
|
分布式计算 数据可视化 搜索推荐
阿里云ACA认证证书有什么用?含金量怎么样?
阿里云作为国内云计算行业的龙头老大,其旗下的认证证书含金量是非常高的,今天主要针对ACA证书进行介绍。
4747 0
阿里云ACA认证证书有什么用?含金量怎么样?

热门文章

最新文章