我正在努力了解工厂模式.如果有很多实现,那么我的工厂模式将会有很多如果还是开关的情况.而且每次我介绍一个新的实现,我应该更改我的工厂代码
像下面的例子,如果让我们假设狗鸭正在实施宠物界面,如果许多动物实现宠物界面,我的工厂会很长时间,如果有其他的代码或开关案例,那么明天.有什么办法可以用更多的动态方法解决这个问题吗?
package com.javapapers.sample.designpattern.factorymethod; //Factory method pattern implementation that instantiates objects based on logic public class PetFactory { public Pet getPet(String petType) { Pet pet = null; // based on logic factory instantiates an object if ("bark".equals(petType)) pet = new Dog(); else if ("quack".equals(petType)) pet = new Duck(); return pet; }
如果动物生长
if ("bark".equals(petType)) pet = new Dog(); else if ("quack".equals(petType)) pet = new Duck(); else if ("mno".equals(petType)) pet = new MNO(); else if ("jkl".equals(petType)) pet = new JKL(); else if ("ghi".equals(petType)) pet = new GHI(); else if ("def".equals(petType)) pet = new DEF(); ...... else if ("abc".equals(petType)) pet = new ABC(); return pet
解决方法
我认为有一个动态的方法:
>在你的工厂,你需要一个Map< String,Class&延长宠物>>>在每个类的静态构造函数中,它扩展了Pet,用这样的映射来注册它.>比创建一个类将只是map.get(pet).newInstance(当然,你必须检查null)