设计模式之创建类模式 - 工厂方法模式 联系客服

发布时间 : 星期日 文章设计模式之创建类模式 - 工厂方法模式更新完毕开始阅读761bb5d130b765ce0508763231126edb6f1a76e3

通用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** * 抽象产品类 * @author Administrator * */ public abstract class Product { // 产品类的公共方法 public void method1() { // 业务处理逻辑 } // 抽象方法 public abstract void method2(); } 1 2 3 4 5 6 7 8 /** * 具体产品类1 * @author Administrator * */ public class ConcreteProduct1 extends Product { @Override 9 10 11 12 13 public void method2() { // 业务逻辑处理 } } 1 2 3 4 5 6 7 8 9 10 11 12 13 /** * 具体产品类2 * @author Administrator * */ public class ConcreteProduct2 extends Product { @Override public void method2() { // 业务逻辑处理 } } 1 /** 2 * 简单工厂模式中的工厂类 3 * @author Administrator 4 * 5 */ 6 public class SimpleFactory { 7 8 public static T createProduct(Class c) { 9 Product product = null; 10 11 try { 12 product = (Product)Class.forName(c.getName()).newInstance(13 } catch (InstantiationException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } catch (IllegalAccessException e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } catch (ClassNotFoundException e) { 20 // TODO Auto-generated catch block 21 e.printStackTrace(); 22 } 23 24 25 26 27 } return (T) product; } 1 /** 2 * 场景类 3 * 4 * @author Administrator 5 * 6 */ 7 public class Client { 8 9 /** 10 * @param args 11 */ 12 public static void main(String[] args) { 13 Product product = SimpleFactory.createProduct(ConcreteProduct1.cla14 /* 15 * 继续业务处理 16 */ 17 product.method1(); 18 } 19 20 }

? 升级为多个工厂类

多工厂模式中,每一个产品类都对应一个创建类,好处就是创建类的职责清晰,而且结构简单,但是给可扩展性和可维护性带来了一定的影响。为什么这么说呢?如果要扩展一个产品类,就需要建立一个相应的工厂类,这样就增加了扩展的难度。因为工厂类和产品类的数量相同,维护时需要考虑两个对象之间的关系。

当然,在复杂的应用中一般采用多工厂的方法,然后在增加一个协调类,避免调用者与各个子工厂交流,协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。 类图:

通用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** * 抽象产品类 * @author Administrator * */ public abstract class Product { // 产品类的公共方法 public void method1() { // 业务处理逻辑 } // 抽象方法 public abstract void method2(); } 1 2 3 4 5 6 7 8 9 10 11 12 /** * 具体产品类1 * @author Administrator * */ public class ConcreteProduct1 extends Product { @Override public void method2() { // 业务逻辑处理 }