工厂模式详解汇总

1.普通造车模式

车的接口:

package com.zhou.factory;

public interface Car {
    public void run();
}

比亚迪车

package com.zhou.factory;

public class BiyadiCar implements Car{
    @Override
    public void run() {
        System.out.println("比亚迪");
    }
}

吉利车

package com.zhou.factory;

public class JiliCar implements Car{
    @Override
    public void run() {
        System.out.println("吉利汽车");
    }
}

特斯拉

package com.zhou.factory;

public class TeslaCar implements Car{
    @Override
    public void run() {
        System.out.println("特斯拉");
    }
}

这3种车都实现了car接口

消费者

package com.zhou.factory;

public class Consumer {
    public static void main(String[] args) {
//        普通造车模式
        Car biyadi = new BiyadiCar();
        Car jili = new JiliCar();
        biyadi.run();
        jili.run();
        

    }
}

缺点:用户需要了解Car接口和它的实现类,才能在Consumer类中new一个相应的对象

2简单工厂模式 对1这种普通模式的改进

在1的基础上加上一层(架构中没有什么是加一层解决不了的,如果有,那就加两层)
加一层车工厂

package com.zhou.factory;

public class CarFactory {
    public Car getCar(String name){
        if (name.equals("biyadi"))
            return new BiyadiCar();
        else if (name.equals("tesla"))
            return new TeslaCar();
        else if (name.equals("jili"))
        return new JiliCar();
        return null;
    }
}

消费者

package com.zhou.factory;

public class Consumer {
    public static void main(String[] args) {
/*//        普通造车模式
        Car biyadi = new BiyadiCar();
        Car jili = new JiliCar();
        biyadi.run();
        jili.run();*/


//        简单工厂模式
        CarFactory c =  new CarFactory();
        c.getCar("biyadi").run();
        c.getCar("jili").run();


    }
}

用户只需要知道车的名字,即可调用车工场返回相应车的对象,无需知道Car接口和它的实现类,方便实用
缺点:每添加一个新一种车,就要改动车工厂的代码,不满足开闭原则

在这里插入图片描述

3 工厂方法模式 对2的进一步改进

在这里插入图片描述

将车工厂抽象成一个接口

package com.zhou.method;

public interface CarFactory {
    public Car getCar();
}

每种车有对应的车工厂(实现了车工厂的接口)
例如比亚迪

package com.zhou.method;

public class BiyadiCarFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new BiyadiCar();
    }
}

每次新来一种车只需要实现这种车实现Car接口,这种车工厂实现CarFactory接口,完成解耦,满足开闭原则
但是增加了代码量,实际中更偏向于选择第二种简单工厂模式。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂模式是一种软件设计模式,用于创建对象。在Python中,可以使用工厂模式来封装对象的创建过程,并且可以在运行时动态地切换不同的对象实现。 工厂模式包括抽象工厂角色、具体工厂角色和产品角色三个主要组成部分。 抽象工厂角色是一个抽象的类或接口,定义了一个或多个创建产品的方法。在Python中,通常使用ABCMeta元类和abstractmethod装饰器来定义抽象基类和抽象方法。 具体工厂角色是抽象工厂角色的具体实现,实现了抽象工厂角色的创建产品的方法。 产品角色是具体工厂角色创建的对象,它们共同实现了同一个接口或继承了同一个父类。 在示例中,我们可以看到具体工厂角色的代码示例。其中,AliFactory、HuabeiFactory和WechatFactory分别实现了create_payment方法,并返回了对应的支付对象。这些具体工厂角色都继承自抽象工厂角色PaymentFactory,而PaymentFactory中定义了抽象方法create_payment。 通过使用工厂模式,我们可以封装对象的创建过程,提高代码的灵活性和可维护性。当需要创建不同的对象时,我们只需要调用对应的具体工厂角色来创建对象,而不需要直接实例化具体的产品角色。 综上所述,工厂模式是一种通过抽象工厂角色和具体工厂角色来封装对象创建过程的设计模式,可以实现对象的动态切换和解耦。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [23种Python设计模式工厂方法模式详解](https://blog.csdn.net/weixin_51098806/article/details/123917610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值