java语言实现创建型设计模式—工厂方法模式
来源:互联网 发布:mac鼠标滚轮没反应 编辑:程序博客网 时间:2024/05/21 20:23
一、描述
基于简单工厂模式中将所有类的创建和初始化放在一个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第一种,这个设计模式将一个工厂类拆分成多个具体的工厂类,每个具体的工厂类负责相应的类的对象的创建。
在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由四部分组成:抽象工厂类、实现抽象工厂类的具体工厂类、抽象类、实现抽象类的具体类。
二、工厂方法模式的优缺点
优点:在工厂方法模式中,创建对象的任务由具体的工厂类负责,一个具体类对应一个具体的工厂类,再由抽象工厂类定义所有具体工厂类创建对象的统一接口,客户端只负责调用具体类创建对应的对象。
如果有一个新的产品加入,那么只需要增加一个具体类和创建这个具体类的工厂类即可,不需要修改原来已有的代码,同一个类的代码量也不会变大,更利于后期的维护,增强了系统的可扩展性。
缺点:每新加一个产品就要增加两个类,需要额外地编写代码,增加了工作量。
三、源代码
1、抽象方法类:
package tong.day4_30.factoryMethod;/** *抽象工厂接口,在这个接口中定义了一个createSalary()方法,由实现该接口的具体类重写该方法,分别创建自己类的对象 * @author tong * */public interface Factory {//这是一个公共的抽象方法,用于创建各种类的对象public abstract Salary createSalary();}
2、具体方法类
package tong.day4_30.factoryMethod;/** * 具体的工厂方法,用于创建特定类的对象 * @author tong * */public class GuangdongSalaryFactory implements Factory {@Overridepublic Salary createSalary() {//返回GuangdongSalary类的对象return new GuangdongSalary();}}
package tong.day4_30.factoryMethod;/** * 具体的工厂方法,用于创建特定类的对象 * @author tong * */public class ZhejiangSalaryFactory implements Factory {@Overridepublic Salary createSalary() {//返回ZhejiangSalary类的对象return new ZhejiangSalary();}}
3、抽象类
package tong.day4_30.factoryMethod;/** * 定义一个薪资接口,所有公司的具体薪资计算都实现这个接口,并重写计算薪资的方法computeSalary() * @author tong * */public interface Salary {public void computeSalary();}
4、具体类
package tong.day4_30.factoryMethod;/** * 广东分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary() * @author Administrator * */public class GuangdongSalary implements Salary {@Overridepublic void computeSalary() {System.out.println("广东分公司薪资计算");}}
package tong.day4_30.factoryMethod;/** * 浙江分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary() * @author Administrator * */public class ZhejiangSalary implements Salary {@Overridepublic void computeSalary() {System.out.println("浙江分公司薪资计算");}}
5、客户端调用
package tong.day4_30.factoryMethod;/** * 在客户端调用工厂方法来创建每个具体的工厂类对象,使用具体工厂类对象来创建不同的薪资对象,由薪资对象调用computeSalary()计算薪资; * 如果还想创建更多的公司薪资,那么就创建一个相应的薪资类,再创建一个相应的薪资计算的具体工厂类。 * @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();}}
0 0
- java语言实现创建型设计模式—工厂方法模式
- java语言实现创建型模式—简单工厂模式
- java语言实现创建型设计模式—抽象工厂模式
- java设计模式之创建型模式-工厂方法模式
- JAVA设计模式创建型模式之工厂方法
- java设计模式之创建型模式-FactoryMethod ( 工厂方法 )
- java设计模式(创建型)之工厂方法模式
- java语言实现创建型设计模式—创建者模式
- 设计模式-创建型模式-工厂方法
- 【设计模式】创建型模式-工厂方法
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01_1):创建型-工厂模式【工厂方法模式】(Factory Method)
- Java设计模式之创建型模式--工厂方法及抽象工厂模式
- 设计模式之—工厂方法模式(FactoryMethod)-Java实现
- 设计模式--创建模式--工厂方法模式--java
- java 设计模式-创建模式之工厂方法模式1
- 新浪微博开支三十三(原创和转发微博view)
- vim的简明教程
- Java同步技术 (一)
- android开发之布局
- Android 之 下拉框(Spinner)的简单使用
- java语言实现创建型设计模式—工厂方法模式
- Linux 进程管理与调度剖析
- 随想录(无均衡负载的smp os设计)
- 下载图片的小程序
- 手动进行冷备份
- Spring 的 form表单 之 checkbox
- shiro过滤器过滤属性含义
- Android ListView异步加载图片错位问题解析
- 基于Spring框架的Shiro配置