首页 > 其他分享 >从零玩转设计模式之简单工厂设计模式-jiandangonchangmoshi

从零玩转设计模式之简单工厂设计模式-jiandangonchangmoshi

时间:2023-05-19 12:14:09浏览次数:28  
标签:jiandangonchangmoshi 实现 Car 开闭 玩转 软件 设计模式 public

title: 从零玩转设计模式之简单工厂设计模式
date: 2022-12-08 11:31:19.472
updated: 2022-12-11 23:03:34.805
url: https://www.yby6.com/archives/jiandangonchangmoshi
categories: 
- 设计模式
tags: 
- 设计模式

简单工厂模式是一种创建型设计模式,用于创建单个对象.

它主要由以下3个部分组成:

工厂类(Factory):负责创建单个对象。
抽象产品(Product):定义产品的接口。
具体产品(Concrete Product):实现抽象产品接口,提供具体的产品。
下面是一个简单的例子,展示了如何使用简单工厂模式创建一个汽车:


/**
 * 抽象产品(Product) 定义产品 需要实现的功能
 */
public interface Car {
    void start();
}

/**
 * 工厂类(Factory):负责创建单个对象
 */
public class CarFactory {
    public static Car createCar(String carType) {
        if (carType.equals("宝马")) {
            return new BMW();
        } else if (carType.equals("兰博基尼")) {
            return new lamborghini();
        } else {
            return null;
        }
    }
}

/**
 * 具体实现(Concrete Product) 创建车辆 
 */
public class BMW implements Car{
    @Override
    public void start() {
        System.out.println("启动宝马");
    }
}


/**
 * 启动车辆
 */
public class Client {
    public static void main(String[] args) {

        Car car = CarFactory.createCar("宝马");
        car.start();


        Car car1 = CarFactory.createCar("兰博基尼");
        car1.start();

    }
}

总结: 简单的说就是把创建对象交给工厂客户端就不需要自己new直接根据某类型直接拿即可
但是这违背了开闭原则

什么是开闭原则?

开闭原则是面向对象设计中的一项基本原则,指对扩展开放,对修改关闭。
它的主要目的是为了保护软件的可扩展性和可维护性,避免在修改软件的过程中对其他部分造成影响。

开闭原则的主要内容有以下几点:
对扩展开放:软件应该具有良好的扩展性,在不修改原有代码的情况下可以扩展新的功能。
对修改关闭:软件应该具有良好的稳定性,在修改原有代码的情况下不会对其他部分造成影响。

开闭原则的优点:
1. 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.。
2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。

image-1670470107251

开闭原则可以通过以下几种方式来实现:

  1. 将具体实现和抽象接口分离:通过使用抽象接口隔离具体实现,可以让软件在不修改原有代码的情况下扩展新的功能。
  2. 使用多态:通过多态的方式来实现抽象接口和具体实现之间的绑定,可以在运行时动态绑定,实现软件的扩展性。
  3. 使用模板方法:通过模板方法将算法的步骤固定,而具体实现由子类实现,实现软件的扩展性。
    通过开闭原则的实现,
  4. 使用反射:通过客户端传递的对象字节码来创建实例,这样子就不需要进行修改原始工厂代码

    /**
     * 使用反射实现开闭原则
     */
    public static <T> Car createCarOpen(Class<T> tClass) {
        Car car = null;
        try {
            Object instance = Class.forName(tClass.getName()).newInstance();
            if (instance instanceof Car) {
                car = (Car) instance;
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return car;
    }

简单工厂在源码中的应用

JDk当中Calendar实例的创建

image-1670474294738

标签:jiandangonchangmoshi,实现,Car,开闭,玩转,软件,设计模式,public
From: https://www.cnblogs.com/Yangbuyi/p/17414756.html

相关文章

  • 从零玩转设计模式之工厂方法设计模式-gonchangfangfamoshi
    title:从零玩转设计模式之工厂方法设计模式date:2022-12-0813:22:13.669updated:2022-12-1123:03:22.379url:https://www.yby6.com/archives/gonchangfangfamoshicategories:-设计模式tags:-设计模式什么是工厂方法模式?“工厂方法模式”是对简单工厂模式的进......
  • 从零玩转设计模式之原型模式-yuanxingmoshi
    title:从零玩转设计模式之原型模式date:2022-12-1120:05:35.488updated:2022-12-2315:35:44.159url:https://www.yby6.com/archives/yuanxingmoshicategories:-设计模式tags:-设计模式-原型模式什么是原型模式设计模式?原型模式是一种软件设计模式,它允许您......
  • 从零玩转设计模式之外观模式-waiguanmos
    title:从零玩转设计模式之外观模式date:2022-12-1215:49:05.322updated:2022-12-2315:34:40.394url:https://www.yby6.com/archives/waiguanmoscategories:-设计模式tags:-设计模式什么是外观模式外观模式是一种软件设计模式,它提供了一种将多个子系统包装在一......
  • 从零玩转设计模式-从零玩转设计模式
    title:从零玩转设计模式date:2022-12-0400:14:53.517updated:2022-12-0400:41:09.896url:https://www.yby6.com/archives/从零玩转设计模式categories:tags:一、设计模式概述二、UML三、创建型模式5种四、结构型模式7种五、行为型模式11种六、如何正确使用......
  • 从零玩转前后端加解密之SM2-sm2
    title:从零玩转前后端加解密之SM2date:2022-08-2119:42:00.907updated:2023-03-3013:28:48.866url:https://www.yby6.com/archives/sm2categories:-加密算法-从零玩转系列tags:-加密算法-sm2前言SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密......
  • 从零玩转人脸识别验证-face
    title:从零玩转人脸识别验证date:2022-05-1521:05:52.974updated:2023-05-1600:00:11.594url:https://www.yby6.com/archives/facecategories:-Java分类-从零玩转系列-人脸识别tags:-java-人脸识别前言在线demo(前往享受人脸识别)本期教程人脸识别第......
  • 从零玩转Activiti7工作流-2021-09-12-16-22-07
    title:从零玩转Activiti7工作流date:2021-09-1216:22:08.51updated:2021-12-2617:43:12.171url:https://www.yby6.com/archives/2021-09-12-16-22-07categories:-工作流tags:Activiti讲师:波波​工作流(Workflow),就是通过计算机对业务流程自动化执行......
  • 从零玩转第三方登录之WeChat公众号扫码关注登陆 -wechatgzh
    title:从零玩转第三方登录之WeChat公众号扫码关注登陆date:2022-09-2722:46:53.362updated:2023-03-3013:28:41.359url:https://www.yby6.com/archives/wechatgzhcategories:-从零玩转系列tags:-第三方登录-从零玩转系列前言由于看见了面试鸭的登陆方式,我......
  • 从零玩转第三方登录之WeChat公众号登陆-cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi
    title:从零玩转第三方登录之WeChat公众号登陆date:2022-09-0316:32:57.876updated:2022-09-0316:32:57.876url:https://www.yby6.com/archives/cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi-wechat-gong-zhong-hao-deng-lucategories:tags:前言由于看见了面试鸭......
  • 从零玩转Yaip使用-cong-ling-wan-zhuan-yaip-shi-yong
    title:从零玩转Yaip使用date:2021-07-1615:47:17.624updated:2021-12-2617:43:12.255url:https://www.yby6.com/archives/cong-ling-wan-zhuan-yaip-shi-yongcategories:-apitags:Yaip****使用开发笔记1.什么是yapiYApi是高效、易用、功能强大的api管理平......