-
模拟场景
客户提出要购买100t苹果,然后农场主跑去收购100t苹果给客户package com.tanoak.create.factory.simple.demo; /** * @author tanoak@qq.com * @date 2018/8/1 22:31 * @Desc */ public class Apple { private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Apple(String name) { this.name = name; } @Override public String toString() { return "Apple{" + "name='" + name + '\'' + '}'; } public static void main(String[] args) { Apple a = new Apple("红色的苹果") ; System.out.println(a.toString()); } }
后面客户又想要100t香蕉,于是代码变成
package com.tanoak.create.factory.simple.demo; /** * @author tanoak@qq.com * @Desc */ public class Banana { private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Banana(String name) { this.name = name; } @Override public String toString() { return "Banana{" + "name='" + name + '\'' + '}'; } public static void main(String[] args) { Apple a = new Apple("红色的苹果") ; Banana b = new Banana("香蕉") ; System.out.println(a.toString()); } }
这样会带来的问题很明显,main方法变得很臃肿,来看下简单工厂是如何解决这个问题的
- 创建水果接口
package com.tanoak.create.factory.simple; /** * @author tanoak@qq.com * @Desc */ public interface IFruit { void name(); }
-
创建工厂类并实现水果接口
package com.tanoak.create.factory.simple; /** * @author tanoak@qq.com * @Desc */ public class FruitFactory { private FruitFactory(){} public static IFruit createProduct(String name){//生产水果 String apple = "apple" ; String banana = "banana" ; if (name == null) { return null; } if (name.equals(banana)) { return new Banana(); }else if (name.equals(apple)) { return new Apple(); }else { return null; } } }
-
苹果与香蕉类实现水果接口
package com.tanoak.create.factory.simple; /** * @author tanoak@qq.com * @date 2018/7/19 16:43 * @Desc */ public class Apple implements IFruit{ private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Apple(String name) { this.name = name; } public Apple() { this.name = name; } @Override public String toString() { return "Apple{" + "name='" + name + '\'' + '}'; } @Override public void name() { this.setName(name); System.out.println("The is Apple"); } } //
package com.tanoak.create.factory.simple; /** * @author tanoak@qq.com * @date 2018/7/19 16:43 * @Desc */ public class Banana implements IFruit{ private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Banana(String name) { this.name = name; } public Banana() { this.name = name; } @Override public String toString() { return "Banana{" + "name='" + name + '\'' + '}'; } @Override public void name() { this.setName(name); System.out.println("This is Banana"); } }
编写好之后,来看Main方法,当需要苹果时只需要修改一个参数就行了,并不需要在main方法中new,有小伙伴可能要问了,这代码没变少反而多了,关于这个问题请看设计模式序言
package com.tanoak.create.factory.simple; /** * @author tanoak@qq.com * @Desc 简单工厂模式 */ public class Main { public static void main(String[] args) { IFruit apple = FruitFactory.createProduct("apple");//banana apple.name(); } }
-
如理解有误,请指正,谢谢
网友评论