一篇文章了解多态(简单工厂版)

什么是多态?

指为不同数据类型的实体提供统一的接口。指的是两个或者多个属于不同类的对象对于同一消息或者方法
调用所做出不同的响应的能力。简单来说是:父类的引用指向子类的实现

多态主要用途

提高系统的可维护性,可扩展性,如果我们想扩展同一个父类的新的一类方法,我们可以通过创建一个新的子类来实现不同的方法。

多态示例

什么是简单工厂?

使用一个工厂对象(一个单独的类来去创造实例)用来生产同一等级结构中的任意产品。所有的实例化字类的过程都交由工厂去做,而不是在客户端去做。

构造运算器类写法

类图
在这里插入图片描述

代码

public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;
 
        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
 
        }
        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }

class OperationAdd:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
    

public class OperationSub:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }

运算器简单工厂写法

类图

在这里插入图片描述

代码

public class OperationFactory {
    public static Operation createOperate(String operate) {
        Operation opera = null;
        switch (operate) {
            case "+":
                opera = new OperationAdd();
                break;
            case "-":
                opera = new OperationSub();
                break;
        }
        return opera;
    }
}

客户端

public class Client {
    public static void main(String[] args) {
    Operation oper;
    oper = OperationFactory.createOperate("+");
    oper.NumberA = 1;
    oper.NumberB = 2;
    double result = oper.GetResult();
    Console.WriteLine(result);
    }
}

分析

在这里插入图片描述

由上图可知:Operation类是父类,父类引用指向子类(OperationAdd)的实现,对于同一个方法每个子类都有不同的实现。
简单工厂体现出多态的一个好处——可扩展性。如果此时,要增一个乘法类,那么我只需要新增一个单独的乘法类,并且在switch case中增减一个“x”符号的判断就能实现乘法的扩展,但是这种解决方案还是违反了开闭原则,这里对开闭原则不做说明。

总结:

当谈论多态时,我们通常在面向对象编程(OOP)的背景下讨论它。多态是OOP的一个重要概念,它允许不同的对象对于相同的方法调用做出不同的响应。简单来说,多态性允许你使用一个父类引用来引用子类的对象,并且在运行时根据实际的对象类型来调用相应的方法。

在简单工厂模式中,多态性可以被广泛应用,特别是在创建对象实例的过程中。简单工厂模式是一种创建型设计模式,它封装了对象的实例化过程,使客户端代码与具体类的实例化解耦。多态性使得你可以使用父类引用来指向各种具体子类的实例,而不必直接引用每个具体子类。

让我更具体地解释一下多态在简单工厂中的应用:

假设你有一个简单工厂,用于创建不同类型的图形对象,比如圆形和矩形。首先,你会有一个抽象的“Shape”类作为父类,其中包含一个名为“draw”的方法。然后,你有“Circle”和“Rectangle”两个具体子类,它们都继承自“Shape”并实现了“draw”方法。

使用多态,你可以在客户端代码中这样使用简单工厂:

public class Client {
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactory();

        Shape circle = factory.createShape("Circle");
        Shape rectangle = factory.createShape("Rectangle");

        circle.draw();      // 调用Circle的draw方法
        rectangle.draw();   // 调用Rectangle的draw方法
    }
}

在这里,你只是通过父类引用“Shape”来创建和调用不同的子类对象,实现了多态性。客户端代码并不直接涉及具体类的实例化,而是通过简单工厂创建适当的对象。

多态性使得你的代码更具灵活性和可扩展性,因为你可以轻松地添加新的子类,而不必更改客户端代码。同时,它也促进了代码的松耦合,提高了代码的可维护性和可测试性。

当谈到多态和简单工厂模式时,还有一些其他要补充的重要点:

  1. 扩展性: 多态和简单工厂模式都有助于增强代码的扩展性。你可以轻松地添加新的具体子类,只需扩展抽象父类和适当调整工厂类,而不必修改客户端代码。

  2. 灵活性: 多态性使得你可以在运行时决定使用哪个具体子类的实例。这意味着你可以根据需求动态切换不同的实现,从而实现更大的灵活性。

  3. 封装: 简单工厂模式封装了对象的实例化过程,将创建对象的细节隐藏在工厂内部。这有助于减少客户端代码与具体类之间的直接耦合。

  4. 适用场景: 简单工厂模式适用于具有共同接口和不同实现的类族。它适用于需要在运行时选择一个类的情况,同时隐藏了实例化的细节。

  5. 抽象工厂模式: 如果需要创建多个相关的对象组,可以考虑使用抽象工厂模式。它提供了一种创建一系列相关或依赖对象的方法。

  6. 弹性架构: 多态和简单工厂模式都有助于构建弹性的、可维护的架构。它们支持开闭原则(Open-Closed Principle),即系统应该对扩展开放,对修改关闭。

  7. 继承和重写: 多态性涉及到子类对父类方法的重写(override),确保子类可以根据自身需求实现不同的行为。

  8. 代码可读性: 使用多态性和工厂模式可以使代码更加可读,因为它们使代码更具抽象性和可理解性。

总之,多态性和简单工厂模式是面向对象编程中的重要概念,可以帮助你构建更加灵活、可扩展和可维护的代码。通过正确应用它们,你可以更好地管理对象的创建和使用,从而提高代码质量和开发效率。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Circ.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值