定义:
工厂方法模式:
创建一个实现类的接口,但是由子类决定实现的类是哪一个,工厂模式让类的实现推迟到子类
设计原则:依赖倒置原则 ,要依赖抽象,不要依赖具体类
来用类图来清晰的表示下的它们之间的关系:
例子:
小明下班,想要骑共享单车回家,在他公司附近 有 小黄车(ofo) 、摩拜单车(Mobike)、和小鸣单车
抽象产品:
package design.factory2; public interface IBike { public void rideBike(); }
具体产品:
package design.factory2; public class Ofo implements IBike { @Override public void rideBike() { System.out.println("骑小黄车回家..."); } }
package design.factory2; public class Mobike implements IBike { @Override public void rideBike() { System.out.println("骑膜拜单车回家..."); } }
package design.factory2; public class Xm implements IBike { @Override public void rideBike() { System.out.println("骑小鸣单车回家..."); } }
简单工厂:
package design.factory2; public class BikeFactory { public static IBike findBike(String bikeName){ try { Class clazz = Class.forName("design.factory2."+bikeName); return (IBike) clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } return null; } }
测试程序:
package design.factory2; public class Client { public static void main(String[] args) { IBike ofo = BikeFactory.findBike("Ofo"); ofo.rideBike(); split(); IBike xm = BikeFactory.findBike("Xm"); xm.rideBike(); split(); IBike mb = BikeFactory.findBike("Mobike"); mb.rideBike(); split(); } private static void split(){ System.out.println("---------------------------"); } }
运行结果如下:
优点:
避免了直接在客户端创建产品的责任,容易扩展,如果新增加一个产品,只需要 继承自抽象产品 ,