工厂方法模式
来源:互联网 发布:推女郎吧最新域名 编辑:程序博客网 时间: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
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 在外部安装svn之后怎么用到vs上面
- 【记录】ldr
- java设计模式之工厂模式
- Oracle 不等于判断,防止字段内容为NULL时报错的情况
- 【NOIP模拟】Angel Beats!
- 工厂方法模式
- JS动态改变form表单里的action值属性的方法
- iOS 地图截屏
- 【记录】MOV与LDR
- 源码解析之–YYAsyncLayer异步绘制
- CNN
- Android事件分发与焦点争夺
- Hadoop版本变化
- 浅析树状数组