2026/1/11 17:33:48
网站建设
项目流程
北京建设信源网站 怎么打不开,wordpress 表介绍,wordpress 签到功能,徐州公司网站制作6.3 工厂方法模式
工厂方法模式既保留了简单工厂模式的优点#xff0c;同时又解决了简单工厂模式的缺点。怎么解决简单工厂模式的缺点#xff08;不符合OCP开闭原则#xff09;的#xff1f;
一个工厂对应生产一种产品
工厂方法模式的角色包括#xff1a;抽象工厂角色具体…6.3 工厂方法模式工厂方法模式既保留了简单工厂模式的优点同时又解决了简单工厂模式的缺点。怎么解决简单工厂模式的缺点不符合OCP开闭原则的一个工厂对应生产一种产品工厂方法模式的角色包括抽象工厂角色具体工厂角色抽象产品角色具体产品角色代码如下packagecom.powernode.factory;/** * 武器类抽象产品角色 * author 动力节点 * version 1.0 * className Weapon * since 1.0 **/publicabstractclassWeapon{/** * 所有武器都有攻击行为 */publicabstractvoidattack();}packagecom.powernode.factory;/** * 具体产品角色 * author 动力节点 * version 1.0 * className Gun * since 1.0 **/publicclassGunextendsWeapon{Overridepublicvoidattack(){System.out.println(开枪射击);}}packagecom.powernode.factory;/** * 具体产品角色 * author 动力节点 * version 1.0 * className Fighter * since 1.0 **/publicclassFighterextendsWeapon{Overridepublicvoidattack(){System.out.println(战斗机发射核弹);}}packagecom.powernode.factory;/** * 武器工厂接口(抽象工厂角色) * author 动力节点 * version 1.0 * className WeaponFactory * since 1.0 **/publicinterfaceWeaponFactory{Weaponget();}packagecom.powernode.factory;/** * 具体工厂角色 * author 动力节点 * version 1.0 * className GunFactory * since 1.0 **/publicclassGunFactoryimplementsWeaponFactory{OverridepublicWeaponget(){returnnewGun();}}packagecom.powernode.factory;/** * 具体工厂角色 * author 动力节点 * version 1.0 * className FighterFactory * since 1.0 **/publicclassFighterFactoryimplementsWeaponFactory{OverridepublicWeaponget(){returnnewFighter();}}客户端程序packagecom.powernode.factory;/** * author 动力节点 * version 1.0 * className Client * since 1.0 **/publicclassClient{publicstaticvoidmain(String[]args){WeaponFactoryfactorynewGunFactory();Weaponweaponfactory.get();weapon.attack();WeaponFactoryfactory1newFighterFactory();Weaponweapon1factory1.get();weapon1.attack();}}如果想扩展一个新的产品只要新增一个产品类再新增一个该产品对应的工厂即可例如新增匕首packagecom.powernode.factory;/** * author 动力节点 * version 1.0 * className Dagger * since 1.0 **/publicclassDaggerextendsWeapon{Overridepublicvoidattack(){System.out.println(砍丫的);}}packagecom.powernode.factory;/** * author 动力节点 * version 1.0 * className DaggerFactory * since 1.0 **/publicclassDaggerFactoryimplementsWeaponFactory{OverridepublicWeaponget(){returnnewDagger();}}客户端程序packagecom.powernode.factory;/** * author 动力节点 * version 1.0 * className Client * since 1.0 **/publicclassClient{publicstaticvoidmain(String[]args){WeaponFactoryfactorynewGunFactory();Weaponweaponfactory.get();weapon.attack();WeaponFactoryfactory1newFighterFactory();Weaponweapon1factory1.get();weapon1.attack();WeaponFactoryfactory2newDaggerFactory();Weaponweapon2factory2.get();weapon2.attack();}}我们可以看到在进行功能扩展的时候不需要修改之前的源代码显然工厂方法模式符合OCP原则。工厂方法模式的优点一个调用者想创建一个对象只要知道其名称就可以了。扩展性高如果想增加一个产品只要扩展一个工厂类就可以。屏蔽产品的具体实现调用者只关心产品的接口。工厂方法模式的缺点每次增加一个产品时都需要增加一个具体类和对象实现工厂使得系统中类的个数成倍增加在一定程度上增加了系统的复杂度同时也增加了系统具体类的依赖。这并不是什么好事。