简单工厂模式
定义
简单工厂模式又称为静态工厂方法, 它通过工厂对象来创建出你所需要的对象
问题
小明在年初投资开了个小船厂,头几个月陆陆续续有订单进来,造的船都是摆渡船,经过几个月后船厂名声远播,越来越多的人来小明这边造船,并有其它船的需求。
在这里我们可以把船厂看做为工厂,摆渡船为工厂造出来的船系列之一,那么我们要造别的船该如何去去做呢?
怎么解
工厂对外,对我(需求方)我下了单我只关心最终结果,你们内部怎么弄是你们的事情。
工厂对内,分几个流水线,来造不同的产品,最终生成出同一个抽象的产品。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
public interface Ship { void move(); }
public class SmallShip implements Ship { void move() { System.out.println("小三板在移动"); } }
public class FishingVessel implements Ship { void move() { System.out.println("渔船在移动"); } }
public class ShipFactory() { public static Ship createShip(String shipName) { if("小三板".equals(shipName)) { return new SmallShip(); } else if("渔船".equals(shipName)) { return new FishingVessel(); } else { return null; } } }
public static void main(String [] args) { Ship smallShip = ShipFactory.createShip("小三板"); Ship fishingVessel = ShipFactory.createShip("渔船"); smallShip.move(); fishingVessel.move(); }
|
在这里工厂的流水线都在同一件事情就是造船,不同的是造不同的船。只要需要什么船,下单到ShipFactory工厂,工厂会根据shipName给你对应的船。用户不需要关心怎么生产,只关心拿到的对象,这样对象的创建和对象的业务之间耦合度降低。
如果再加一种船的品种,我们只需要在工厂中再加个分支判断即可,但是随着业务线的扩展,越来越多船的品种需要创建,我们可能会创建上百种分支,这样对于维护的成本或者复杂度都会上升, 不利于系统的健壮。