本篇通过对工厂模式的应用和与简单工厂模式的区别,讲讲我对工厂模式的理解,如果有描述有误或者误人子弟内容,望在评论区指出。
当业务场景符合不同条件下创建不同的实例的时候就可以使用工厂模式,但也是创建实例的过程比较复杂,不只是单单new就完事的业务才能使用,不然没有必要使用工厂模式,因为使用工厂模式必然会使系统复杂化。
我们使用上面第一个例子,主板进行代码编写。
/*** 主板*/
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 条评论) |