设计模式讲解---工厂方法模式

系列文章目录

例如:第一章 Python 机器学习入门之pandas的使用
创建型模式:
        [1]   工厂方法模式
结构型模式:



工厂方法模式简介

创建型模式:提供创建对象的机制, 能够提升已有代码的灵活性和可复用性。

工厂方法模式:是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。


一、问题

假设你正在开发一款物流管理应用。 最初版本只能处理卡车运输, 因此大部分代码都在位于名为 卡车的类中。
一段时间后, 这款应用变得极受欢迎。 你每天都能收到十几次来自海运公司的请求, 希望应用能够支持海上物流功能。
在这里插入图片描述
但是代码问题该如何处理呢? 目前, 大部分代码都与卡车类相关。 在程序中添加 轮船类需要修改全部代码。 更糟糕的是, 如果你以后需要在程序中支持另外一种运输方式, 很可能需要再次对这些代码进行大幅修改。

最后, 你将不得不编写繁复的代码, 根据不同的运输对象类, 在应用中进行不同的处理。

二、解决方法

1.整合公共的方法,比如,无论是陆运还是海运,都是有 deliver() 送货方法。
2.创建工厂方法,创建对象通过子类实现。

三、代码实现

1.整合公共方法

// 运输方式接口,封装了运送方法
interface Transport{
    public void deliver();
}

// 卡车
class Truck implements Transport{
    public void deliver(){
        System.out.println("货物在盒子中,以陆路方式运输 ");
    }
}

// 轮船
class Ship implements Transport{
    public void deliver(){
        System.out.println("货物在集装箱中,以海陆的方式运输");
    }
}

2.创建工厂

// 物流工厂
abstract class LogisticsFactory{
    abstract Transport chooseTransport();
}

// 道路物流
class RoadLogistics extends LogisticsFactory{

    @Override
    Transport chooseTransport() {
        // ....
        return new Truck();
    }
}

// 海陆物流
class SeaLogistics extends LogisticsFactory{

    @Override
    Transport chooseTransport() {
        // ....
        return new Ship();
    }
}
  1. main方法调用
public class FactoryMethod {
    public static void main(String[] args) {
        String s = "road";
        LogisticsFactory logistics;
        if( s.equals("road")){ // 根据条件选择交通方式,创建对象即可
            logistics = new RoadLogistics();
        }else {
            logistics = new SeaLogistics();
        }

        Transport transport = logistics.chooseTransport();
        transport.deliver();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值