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

阅读: 评论:0

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

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

前言


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

工厂模式的应用场景


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

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

工厂模式例子


我们使用上面第一个例子,主板进行代码编写。

要生成的类

MainBoard(主板类)
/*** 主板*/
public  class MainBoard {/*** 主板介绍*/public void showConfiguration() {System.out.println("这个是主板");}
}
七彩虹主板
/*** 七彩虹主板*/
public class ColorfulMainBoard extends MainBoard{@Overridepublic void showConfiguration() {System.out.println("七彩虹 战斧C.AB350M-HD 魔音版 V14B ");System.out.println("芯片组或北桥芯片:AMD B350  电源接口:LGA1150电源接口");}
}
微星主板
/*** 微星主板*/
public class MsiMainBoard extends MainBoard {@Overridepublic 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*/@Overridepublic MainBoard createMainBoard() {//进行复杂的创建过程// .....return new ColorfulMainBoard();}
}
微星主板制作工厂
/*** 微星主板生产工厂*/
public class MsiMainBoardFactoryImpl implements MainBoardFactory {/*** 创建主板* @return*/@Overridepublic 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();;}//输出主板信息ateMainBoard().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=ateMainBoard(MainBoardType.MSI);mainBoard.showConfiguration();}

这样做有什么意义

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

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

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

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

总结

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

本文发布于:2024-02-04 18:19:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170713508358212.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式   工厂
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23