23种设计模式[2]:工厂方法模式

1、简单工厂模式(静态工厂方法,不属于23种GOF设计模式之一)

定义:定义一个用于建立产品对象的方法,由该工厂类根据传入的参数,动态决定应该建立哪个产品类(这些产品类继承自一个父类或接口)的实例。编程

类型:建立类模式设计模式

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();
    }
}

 

 

2、工厂方法模式

定义:定义一个用于建立产品对象的接口,由子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。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

相关文章
相关标签/搜索