首页 > 代码库 > Java设计模式-工厂模式

Java设计模式-工厂模式

工厂方法模式

 

普通工厂模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

举例:北京工厂和上海工厂

源文件:

FactoryInterface.java

public interface FactoryInterface {
 
    /**
     * 工厂的生产方法
     */
    void produce();
}

BejinFactory.java

public class BejinFactory implements FactoryInterface {
 
    @Override
    public void produce() {
       System.out.println("北京工厂开始生产");
    }
 
}

ShangHaiFactory.java

public class ShangHaiFactory implements FactoryInterface {
 
    @Override
    public void produce() {
       System.out.println("上海工厂开始生产");
    }
 
}

Factory.java

public class Factory {
 
    public FactoryInterface produce(String address){
       if("北京".equals(address)){
           return new BejinFactory();
       }else if("上海".equals(address)){
           return new ShangHaiFactory();
       }
       return null;
    }
}

测试

Test.java

public class Test {
 
    public static void main(String[] args) {
       Factory factory = new Factory();
       FactoryInterface beijing = factory.produce("北京");
       FactoryInterface shanghai = factory.produce("上海");
       beijing.produce();
       shanghai.produce();
    }
}


输入:

北京工厂开始生产

上海工厂开始生产

 

多个工厂方法模式

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

修改Factory.java

public class Factory {
 
    public FactoryInterface produceBeiJing() {
       return new BejinFactory();
    }
    public FactoryInterface produceShangHai() {
       return new ShangHaiFactory();
    }
 
}

Test.java

public class Test {
 
    public static void main(String[] args) {
       Factory factory = new Factory();
       FactoryInterface beijing = factory.produceBeiJing();
       FactoryInterface shanghai = factory.produceShangHai();
       beijing.produce();
       shanghai.produce();
    }
}

输出:

北京工厂开始生产

上海工厂开始生产

 

静态工厂方法模式

将上面Factory中的方法设置为静态,则不用再创建Factory的实例

Factory.java

public class Factory {
 
    public static FactoryInterface produceBeiJing() {
       return new BejinFactory();
    }
    public static FactoryInterface produceShangHai() {
       return new ShangHaiFactory();
    }
 
}

Test.java

public class Test {
 
    public static void main(String[] args) {
       FactoryInterface beijing = Factory.produceBeiJing();
       FactoryInterface shanghai = Factory.produceShangHai();
       beijing.produce();
       shanghai.produce();
    }
}


输出:

北京工厂开始生产

上海工厂开始生产

 

抽象工厂模式

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

 

代码:

 

Factory.java

public interface Factory {
 
    FactoryInterface produce();
}

BeiJingFactory.java

public class BeiJingFactory implements Factory {
 
    @Override
    public FactoryInterface produce() {
       return new BeJingProducer();
    }
 
}

ShangHaiFactory.java

public class ShangHaiFactory implements Factory {
 
    @Override
    public FactoryInterface produce() {
       return new ShangHaiProducer();
    }
 
}


ShangHaiProducer.java

public class ShangHaiProducer implements FactoryInterface {
 
    @Override
    public void produce() {
       System.out.println("上海工厂开始生产");
    }
 
}


BeJingProducer.java

public class BeJingProducer implements FactoryInterface {
 
    @Override
    public void produce() {
       System.out.println("北京工厂开始生产");
    }
 
}


FactoryInterface.java

public interface FactoryInterface {
 
    /**
     * 工厂的生产方法
     */
    void produce();
}


Test.java

public class Test {
 
    public static void main(String[] args) {
       Factory beijingFactory = new ShangHaiFactory();
       Factory shanghaiFactory = new BeiJingFactory();
       FactoryInterface beijing = beijingFactory.produce();
       FactoryInterface shanghai = shanghaiFactory.produce();
       beijing.produce();
       shanghai.produce();
    }
}


这个模式的好处就是,如果你现在想增加一个功能:增加广州工厂。则只需做一个实现类,实现FactoryInterface接口,同时做一个工厂类,实现Factory接口,就可以了,不需要改动其它的工厂类


Word 版下载地址:http://download.csdn.net/detail/yangwei19680827/7306727