/*【简单工厂模式】
*生活中的工厂就是生产产品,而设计模式中工厂是用来生产对象;
*简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例;
*简单工厂模式是工厂模式家族中最简单实用的模式;
*/
// =========客户端========== public class NoFactoryDemo { public static void main(String args[]) { ClothDoll cd = new ClothDoll(); System.out.println(cd.getInfo()); BabieDoll bd = new BabieDoll(); System.out.println(bd.getInfo()); } } // ==========工厂端========== // 布娃娃 class ClothDoll { public String getInfo() { return "我是布娃娃,我怕脏!"; } } // 芭比娃娃 class BabieDoll { public String getInfo() { return "我是芭比娃娃,我很漂亮"; } }
/*
* 思考:用面向对象的思维思考这个问题, NoFactoryDemo()为调用者(客户端), ClothDoll()为被调用者(服务器端),
* 客户端直接依赖于服务器端,高耦合性!===========BE CAREFUL========若布娃娃不生产了,生产其他销量好的产品,则客户在new
* ClothDoll()时就会出问题!客户和工厂的产品具有直接依赖关系,代码耦合性太高,柔韧性不强!!!为了解决这个问题引入了工厂模式!
* 工厂模式作用:解耦!!
*/
// =========客户端========== public class FactoryDemo { public static void main(String args[]) { Doll cd = DollFactory.getInstance("LL"); Doll ba = DollFactory.getInstance("cloth"); if (cd != null) { System.out.println(cd.getInfo()); } if (ba != null) { System.out.println(ba.getInfo()); } } } // ==========工厂端========== // 布娃娃 class ClothDoll implements Doll { public String getInfo() { return "我是布娃娃,我怕脏!"; } } // 芭比娃娃 class BabieDoll implements Doll { public String getInfo() { return "我是芭比娃娃,我很漂亮"; } } // 首先将产品抽象到顶层产品接口 interface Doll { public abstract String getInfo(); } // 工厂类;通过工厂模式,使客户依赖于工厂类,而不依赖于产品类 class DollFactory { // 该工厂类只负责生产对象,根据条件不同生产不同对象 public static Doll getInstance(String name) { if (name.equals("cloth")) { return new ClothDoll(); } else if (name.equals("babie")) { return new BabieDoll(); } else { System.out.println("没有该产品!!!"); return null; } } }
/*
* 分析: 这样的目的是客户端不会直接用到产品这个对象,若产品发生变化,客户不受影响,
* 加入工厂模式类,该类只负责生产对象,将这个类通过条件判断生产的是什么产品,去生产不同的对象!
* 客户端没有用到new对象,而是与“工厂类”和“接口”进行依赖,降低了与产品的耦合性,
* 这样如果产品发生更改,只需修改服务器端类即可,不用更改客户端!!(转移依赖关系)
* 也体现了OO设计原则: 面向接口编程!!!增强了程序的可扩展性!!!
*/