国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > java语言实现创建型设计模式―工厂方法模式

java语言实现创建型设计模式―工厂方法模式

来源:程序员人生   发布时间:2015-08-08 09:04:14 阅读次数:3057次

1、描写

基于简单工厂模式中将所有类的创建和初始化放在1个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第1种,这个设计模式将1个工厂类拆分成多个具体的工厂类,每一个具体的工厂类负责相应的类的对象的创建。

在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由4部份组成:抽象工厂类、实现抽象工厂类的具体工厂类、抽象类、实现抽象类的具体类。


2、工厂方法模式的优缺点

优点:在工厂方法模式中,创建对象的任务由具体的工厂类负责,1个具体类对应1个具体的工厂类,再由抽象工厂类定义所有具体工厂类创建对象的统1接口,客户端只负责调用具体类创建对应的对象。

如果有1个新的产品加入,那末只需要增加1个具体类和创建这个具体类的工厂类便可,不需要修改原来已有的代码,同1个类的代码量也不会变大,更利于后期的保护,增强了系统的可扩大性。

缺点:每新加1个产品就要增加两个类,需要额外地编写代码,增加了工作量。

3、源代码

1、抽象方法类:

package tong.day4_30.factoryMethod; /** *抽象工厂接口,在这个接口中定义了1个createSalary()方法,由实现该接口的具体类重写该方法,分别创建自己类的对象 * @author tong * */ public interface Factory { //这是1个公共的抽象方法,用于创建各种类的对象 public abstract Salary createSalary(); }

2、具体方法类

package tong.day4_30.factoryMethod; /** * 具体的工厂方法,用于创建特定类的对象 * @author tong * */ public class GuangdongSalaryFactory implements Factory { @Override public Salary createSalary() { //返回GuangdongSalary类的对象 return new GuangdongSalary(); } }

package tong.day4_30.factoryMethod; /** * 具体的工厂方法,用于创建特定类的对象 * @author tong * */ public class ZhejiangSalaryFactory implements Factory { @Override public Salary createSalary() { //返回ZhejiangSalary类的对象 return new ZhejiangSalary(); } }

3、抽象类

package tong.day4_30.factoryMethod; /** * 定义1个薪资接口,所有公司的具体薪资计算都实现这个接口,并重写计算薪资的方法computeSalary() * @author tong * */ public interface Salary { public void computeSalary(); }

4、具体类

package tong.day4_30.factoryMethod; /** * 广东分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary() * @author Administrator * */ public class GuangdongSalary implements Salary { @Override public void computeSalary() { System.out.println("广东分公司薪资计算"); } }

package tong.day4_30.factoryMethod; /** * 浙江分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary() * @author Administrator * */ public class ZhejiangSalary implements Salary { @Override public void computeSalary() { System.out.println("浙江分公司薪资计算"); } }

5、客户端调用

package tong.day4_30.factoryMethod; /** * 在客户端调用工厂方法来创建每一个具体的工厂类对象,使用具体工厂类对象来创建不同的薪资对象,由薪资对象调用computeSalary()计算薪资; * 如果还想创建更多的公司薪资,那末就创建1个相应的薪资类,再创建1个相应的薪资计算的具体工厂类。 * @author tong * */ public class Client { public static void main(String[] args) { //创建Factory对象,这里使用多态,创建不同的具体工厂类对象 Factory factory = new GuangdongSalaryFactory(); //使用具体的工厂类对象创建不同的薪资对象来计算薪资 Salary salary = factory.createSalary(); salary.computeSalary(); factory = new ZhejiangSalaryFactory(); salary = factory.createSalary(); salary.computeSalary(); } }


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生