目的
工厂方法的目的在于 不必关注于 对象实例化 初始化过程,这样会导致耦合性很高,将这些细节交给工厂负责,只需要调用一个接口就可以得到想要的对象即可,可以解耦。
简单工厂
1 简单工厂方法还可以根据传入的参数 返回不同的 子类对象 融入了多态
public class SimpleFactory{private int screenWidth;private Random random;...;public Enemy create(String Type){int x = random.nextInt(screenWidth);Enemy enemy = null;switch(type){case "AirPlane":enemy = new AirPlane(x,0);break;case "tank":enemy = new Tank(x,0);break;}return enemy;}}
2 简单工厂一定要保持简单,否则就不要用简单工厂,简单工厂的扩展性较差,随着逻辑的复杂,工厂类也得反复修改,缺乏灵活性
3 简单工厂需要传入的参数确定返回类型,还是有一定的耦合性
工厂方法
1 对于复杂的生产需求,将简单工厂进行拆分,构建起抽象化 多态性的生产模式
2 需要定义一个 抽象的 工厂接口
public interface EnemyFactory(){Enemy create(...);}
3 然后分别建立 飞机工厂 和 坦克工厂 将不同的实现相分离
4 当有新的 Enemy类型的时候 只需要实现Factory 构造新的工厂类即可
5 工厂方法模式不但能将客户端与敌人的实例化过程彻底解耦,抽象化、多态化后的工厂还能让我们更自由灵活地制造出独特而多样的产品。其实工厂不必万能,方便面工厂不必生产汽车,手机工厂也不必生产牛仔裤,否则就会通而不精,妄想兼备所有产品线的工厂并不是好的工厂
