设计模式之简单工厂模式

简单工厂模式是最简单的工厂模式,又叫静态工厂方法模式。它实现了同一接口的一些类进行实例的创建,一个工厂通过条件语句创建多个产品,产品的创建逻辑集中在一个工厂类中,客户听过传递不同的参数给工厂,实现创建不同产品的目的。如下:

                                                    

Phone是一个接口,其有一个行为是ring, NokiaPhone和EricssonPhone分别实现了这个接口,在客户端使用时通过传入的是什么手机类型,而得到不同的手机。实现如下:

Phone.java:

 package org.designpattern.creational.simplefactory;

     public interface Phone {
     public void ring();
     }

NokaiPhone.java

    package org.designpattern.creational.simplefactory;
    public class NokiaPhone implements Phone {
        @Override
        public void ring() {
            // TODO Auto-generated method stub
            System.out.println("nokia phone ring!");
        }
    } 

  EricssonPhone.java

    package org.designpattern.creational.simplefactory;
    public class EricssonPhone implements Phone {
        @Override
        public void ring() {
            // TODO Auto-generated method stub
            System.out.println("ericsson phone ring!");
        }
    } 

  PhoneFactory.java

    package org.designpattern.creational.simplefactory;
    public class PhoneFactory {
        public Phone producePhone(String phoneType){
            if("nokia".equals(phoneType))
                return new NokiaPhone();
            else if("ericsson".equals(phoneType))
                return new EricssonPhone();
            else return null;
        }

    } 

如果将PhoneFactory的写成两个静态的方法public static Phone produceNokiaPhone(),public static Phone produceEricssionPhone(),这种创建方法我们称之为静态工厂模式,其实我们使用较多的还是静态工厂模式。 

  使用时的客户端类:

    package org.designpattern.creational.simplefactory;
    public class Main {
        public static void main(String[] args){
            NokiaPhone nokia = (NokiaPhone) new PhoneFactory().producePhone("nokia");
            nokia.ring();
        }

    } 

  可见这个工厂类集中了所有的产品的创建逻辑,形成了一个无所不知的全能类,显然如果这个类不能工作了,则整个程序就会受到影响。更主要是这样不利于扩展,如果应用中需要的工厂类型较多,势必造成工厂类型的职责雷同,因此我们需要更进一步的抽象了,于是就出现了工厂方法和抽象工厂模式。

posted on 2013-07-15 23:47  糊涂先生  阅读(323)  评论(0编辑  收藏  举报