设计模式个人理解——工厂模式

前言


本篇通过对工厂模式的应用和与简单工厂模式的区别,讲讲我对工厂模式的理解,如果有描述有误或者误人子弟内容,望在评论区指出。

工厂模式的应用场景


当业务场景符合不同条件下创建不同的实例的时候就可以使用工厂模式,但也是创建实例的过程比较复杂,不只是单单new就完事的业务才能使用,不然没有必要使用工厂模式,因为使用工厂模式必然会使系统复杂化。

  • 生产主板的时候,有厂商之分,微星、华硕、七彩虹等等都可以生产主板,我们需要根据不同厂商生产对应的主板
  • 进行数据库操作的时候,有mysql、sql server、oracle数据库,每个在程序代码里使用方式是不同的,需要根据条件(例如配置文件指定使用哪种数据库)创建对应的实例

工厂模式例子


我们使用上面第一个例子,主板进行代码编写。
在这里插入图片描述

要生成的类

MainBoard(主板类)
/**
 * 主板
 */
public  class MainBoard {

    /**
     * 主板介绍
     */
    public void showConfiguration() {
        System.out.println("这个是主板");
    }
}
七彩虹主板
/**
 * 七彩虹主板
 */
public class ColorfulMainBoard extends MainBoard{

    @Override
    public void showConfiguration() {

        System.out.println("七彩虹 战斧C.AB350M-HD 魔音版 V14B ");
        System.out.println("芯片组或北桥芯片:AMD B350  电源接口:LGA1150电源接口");
    }
}

微星主板
/**
 * 微星主板
 */
public class MsiMainBoard extends MainBoard {
    @Override
    public void showConfiguration() {
      System.out.println("微星B350M主板");
      System.out.println("芯片组或北桥芯片:AMD B350 CPU插槽:AM4    支持CPU类型:支持Ryzen 7/5系列处");

    }
}

工厂类

主板制作工厂
/**
 * 主板制作厂商
 */
public interface MainBoardFactory {

    /**
     * 上次主板
     * @return
     */
      MainBoard createMainBoard();
}

七彩虹主板制作工厂
/***
 * 七彩虹主板生产
 */
public class ColorfulMainBoardFactoryImpl implements MainBoardFactory {

    /**
     * 生产主板
     * @return
     */
    @Override
    public MainBoard createMainBoard() {
        //进行复杂的创建过程
        // .....
        return new ColorfulMainBoard();
    }
}

微星主板制作工厂
/**
 * 微星主板生产工厂
 */
public class MsiMainBoardFactoryImpl implements MainBoardFactory {
    /**
     * 创建主板
     * @return
     */
    @Override
    public MainBoard createMainBoard() {
        //进行复杂的创建过程
        // .....
        return new MsiMainBoard();
    }
}

客户端代码

 private static void Factory() {
        //客户端工厂模式的使用
        String mainBoard="微星";
        MainBoardFactory mainBoardFactory=null;
        if(mainBoard.equals("七彩虹")){
            mainBoardFactory=new ColorfulMainBoardFactoryImpl();
        }
        else if (mainBoard.equals("微星")){
            mainBoardFactory=new MsiMainBoardFactoryImpl();;
        }
        //输出主板信息
        mainBoardFactory.createMainBoard().showConfiguration();
    }

这样做会有什么好处呢? 这个等下面理清和简单工厂的区别的时候,就知道了

和简单工厂的区别

工厂模式和简单工厂区别在于 简单工厂是由统一的工厂类生成不同类,而工厂模式将工厂类也抽象化,不再由统一的工厂类生成,而是由具体的工厂进行生成,拿上面主板的例子的话就是,简单工厂模式会使用一个工厂类完成七彩虹、微星主板的创建,而工厂模式则每个主板都有一个工厂完成创建。

简单工厂的处理


/**
 * 主板工厂类(简单工厂类使用一个工厂创建不同主板)
 */
public class MainBoardFactory {

    /**
     * 生产主板
     * @return
     */
   public static MainBoard createMainBoard(MainBoardType mainBoardType){
           MainBoard result=null;
           switch (mainBoardType){
               case COLORFUL:
                   result=new ColorfulMainBoard();
                   break;
               case MSI:
                   result=new MsiMainBoard();
                   break;
           }
           return result;
    }
}

 //客户端代码
 private static void SimpleFactory() {

        MainBoard mainBoard=simpleFactory.MainBoardFactory.createMainBoard(MainBoardType.MSI);
        mainBoard.showConfiguration();

 }

这样做有什么意义

当我们新增另一个厂商的主板类的时候,例如新增华硕的主板,看看简单工厂和工厂模式是怎么处理的

  • 简单工厂需要先新增华硕的主板类,然后在主板工厂修改代码,加多一个case选择

  • 工厂模式需要新增华硕的主板类,然后再新增华硕主板工厂类

显然简单工厂违背了开放-封闭原则,新增功能的时候,修改了原有的类(工厂类),而工厂模式因为把简单工厂里的swich、case选择的代码移动到了客户端由客户端进行选择具体要用那个工厂类,所以并不用修改工厂类。

总结

工厂模式的好在于封装了对象的创建过程,并遵循了开放-封闭原则,以上是我对工厂模式的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是一种经过总结、优化的、可重复使用的设计经验的总结。它是软件工程中一种解决特定问题的可复用方案。设计模式不是一成不变的,而是可以根据不同的需求进行变化,以达到最佳的效果。设计模式可以提高程序的可读性、可维护性、可扩展性,同时也可以提高程序的性能和稳定性。 设计模式可以分为三种类型:创建型模式、结构型模式和行为型模式。创建型模式用于描述对象的创建过程,结构型模式用于描述对象之间的关系,行为型模式用于描述对象的行为和交互。本篇文章将介绍一些常用的设计模式。 1. 工厂模式(Factory Pattern) 工厂模式是一种常用的创建型模式,它使用一个工厂方法来创建对象,而不是通过直接调用构造函数。工厂模式可以隐藏对象的创建过程,使代码更加灵活和易于维护。工厂模式可以分为简单工厂模式、工厂方法模式和抽象工厂模式。 2. 单例模式(Singleton Pattern) 单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式可以保证对象的唯一性,避免了多个实例对系统资源的浪费。 3. 代理模式(Proxy Pattern) 代理模式是一种结构型模式,它为一个对象提供一个代理,以控制对这个对象的访问。代理模式可以增加对象的安全性,降低对象的访问成本,同时也可以提高程序的灵活性和可扩展性。 4. 装饰器模式(Decorator Pattern) 装饰器模式是一种结构型模式,它动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。装饰器模式可以避免使用子类来扩展对象的功能,从而使代码更加灵活和可扩展。 5. 观察者模式(Observer Pattern) 观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,会通知所有的观察者对象,使它们能够及时更新自己的状态。 以上是五种常用的设计模式,它们在软件开发中都有着广泛的应用。设计模式可以帮助我们更好地组织代码、降低程序的耦合度、提高程序的可扩展性和可维护性,是一种非常重要的编程技巧。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值