定义:定义一个用于建立产品对象的方法,由该工厂类根据传入的参数,动态决定应该建立哪个产品类(这些产品类继承自一个父类或接口)的实例。编程
类型:建立类模式设计模式
public interface SmsService { void sendSms(); } public class MontnetsSmsService implements SmsService { @Override public void sendSms() { System.out.println("经过梦网发送!"); } } public class EtonenetSmsService implements SmsService { @Override public void sendSms() { System.out.println("经过移通发送!"); } } public class SmsServiceFactory { public static SmsService getSmsService(int providerId) { SmsService ss; switch (providerId) { case 0: ss = new MontnetsSmsService(); break; case 1: ss = new EtonenetSmsService(); break; default: ss = new EtonenetSmsService(); } return ss; } public static void main(String[] args) { SmsService ss = SmsServiceFactory.getSmsService(0); //发送短信 ss.sendSms(); } }
定义:定义一个用于建立产品对象的接口,由子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。ide
类型:建立类模式spa
类图:.net
工厂方法模式代码:设计
public interface SmsService { void sendSms(); } //工厂接口 public interface SmsServiceFactory { SmsService getSmsService(int providerId); } public class MontnetsSmsService implements SmsService { @Override public void sendSms() { System.out.println("经过梦网发送!"); } } public class EtonenetSmsService implements SmsService { @Override public void sendSms() { System.out.println("经过移通发送!"); } } /** * 工厂实现类 */ public class SmsServiceFactoryImpl implements SmsServiceFactory{ @Override public SmsService getSmsService(int providerId) { SmsService ss; switch (providerId) { case 0: ss = new MontnetsSmsService(); break; case 1: ss = new EtonenetSmsService(); break; default: ss = new EtonenetSmsService(); } return ss; } public static void main(String[] args) { //向上转型为工程接口 SmsServiceFactory ssf = new SmsServiceFactoryImpl(); SmsService ss = ssf.getSmsService(0); //发送短信 ss.sendSms(); } }
工厂方法模式:code
经过工厂方法模式的类图能够看到,工厂方法模式有四个要素:对象
上文提到的简单工厂模式跟工厂方法模式极为类似,区别是:简单工厂只有三个要素,他没有工厂接口,而且获得产品的方法通常是静态的(红色注释部分)。由于没有工厂接口,因此在工厂实现的扩展性方面稍弱,能够算所工厂方法模式的简化版。blog
如写的很差,欢迎拍砖!继承
PS:
http://blog.csdn.net/zhengzhb/article/details/7359385