工厂方法模式

来源:互联网 发布:推女郎吧最新域名 编辑:程序博客网 时间:2024/05/01 17:16

简单工厂模式

在理解工厂方法模式前,先掌握简单工厂模式以及其不足之处。简单工厂模式有3个类型:普通简单工厂,多方法简单工厂,静态方法简单工厂。

普通简单方法

建立一个工厂类,对实现了同一接口的一些类创建实例:

package xianggen.designpattern.factorymethod;/** * 发工资接口 * PaySalary.java * @author xianggen * @date 2016年7月18日 上午10:25:31 */public interface PaySalary {    public void paySalary();}
package xianggen.designpattern.factorymethod;public class EmployeePay implements PaySalary{    public void paySalary() {        System.out.println("pay salary to employee!");    }}
package xianggen.designpattern.factorymethod;public class ManagerPay implements PaySalary{    public void paySalary(){        System.out.println("pay salary to Managers!");    }}
package xianggen.designpattern.factorymethod;public class PaySalaryFactory {    public PaySalary produce(String type){        if("Employee".equals(type)){            return new EmployeePay();        }else if("Manager".equals(type)){            return new ManagerPay();        }else{            System.out.println("please enter right type!");            return null;        }    }}
package xianggen.designpattern.factorymethod;public class FactoryTest {    public static void main(String[] args) {        PaySalaryFactory factory=new PaySalaryFactory();        PaySalary paySalary=factory.produce("Employee");        paySalary.paySalary();    }}

多方法简单工厂

在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象

多个工厂方法模式是提供多个工厂方法,分别创建对象。

修改工厂类

public class PaySalaryFactory{    public PaySalary produceEmployee{        return new EmployeePay();    }    public PaySalary produceManager(){        return new ManagerPay();    }

静态方法简单工厂

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

public class PaySalaryFactory{public static PaySalary produceEmployee{    return new EmployeePay();}public static PaySalary produceManager(){    return new ManagerPay();}

应用场景

需要创建大量的产品,共享同一接口;倾向于静态工厂方法模式

Factory Method(工厂方法模式)

简单工厂模式问题

类的创建依赖工厂类,想要拓展程序,必须对工厂类进行修改。

解决办法

创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

关键:工厂接口、工厂实现类

package xianggen.designpattern.factorymethod;/** * 工厂接口 * Provider.java * @author xianggen * @date 2016年7月18日 上午11:19:09 */public interface Provider {    public PaySalary produce();}
package xianggen.designpattern.factorymethod;/** * 工厂实现类 * PayEmployeeFactory.java * @author xianggen * @date 2016年7月18日 上午11:10:55 */public class PayEmployeeFactory implements Provider {    public PaySalary produce(){        return new EmployeePay();    }}
package xianggen.designpattern.factorymethod;public class PayManagerFactory implements Provider {    public PaySalary produce(){        return new ManagerPay();    }}
//通过工厂类接口new一个工厂实现类// 测试,通过工厂接口new一个工厂实现类类        Provider provider=new PayManagerFactory();        PaySalary paySalary2=provider.produce();        paySalary2.paySalary();

优点

可扩展性较好。若想增加一个功能(接口定义1个方法),只需实现一个实现类;实现功能的接口,同时实现一个工厂类实现Provider接口。这样,无需改动之前的实现类(接口实现类、工厂实现类)。

0 0
原创粉丝点击