设计模式之Factory

    技术2022-05-20  43

    最近开始对设计模式产生了兴趣,于是翻来“四人帮”的《设计模式》来看,发现很难懂,真不是我这小小的本科生能够轻易理解的,算了,我还是先看看旁人的学习成果吧,拿来研究了一下,发现工程模式并不是很难(当然我只是说思想),挺容易上手的,闲话不多说,总结一下吧。

    模式名称:工厂模式

    别名:Kit

    说明:工厂模式包括:工厂方法(Factory Method) 抽象工厂(Abstract Factory)

    意图:在不指明类名的前提下,创建一系列相关的类的对象的接口。

    实现例程:(引用地址:http://www.jdon.com/designpatterns/designpattern_factory.htm)

    工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

    实现工厂模式要具备单个要素,一是接口,二是实现接口的类,三是工厂类,然后我们就可以根据自己的需要,传递相应的参数,由工厂来“生产”我们需要的类的对象,而我们不需要提供具体的类的信息。例如,下面的代码:

    /** * 简单的工厂模式java实现 */ package com.zyqhi.OperationFactory; abstract class Operation{ protected double NumberA; protected double NumberB; public double GetResult(){ double result = 0; return result; }; } class OperationAdd extends Operation{ public double GetResult(){ double result; result = NumberA + NumberB; return result; } } class OperationSub extends Operation{ public double GetResult(){ double result; result = NumberA - NumberB; return result; } } class OperationMul extends Operation{ public double GetResult(){ double result; result = NumberA * NumberB; return result; } } class OperationDiv extends Operation{ public double GetResult(){ double result; try{ if(NumberB == 0) throw new Exception(); } catch(Exception e){ System.err.println("除法分母不能为零"); } result = NumberA / NumberB; return result; } } public class OperationFactory { public static Operation createOperation(String operate){ Operation oper = null; if(operate.equals("+")){ oper = new OperationAdd(); } else if(operate.equals("-")){ oper = new OperationSub(); } else if(operate.equals("*")){ oper = new OperationMul(); } else if(operate.equals("/")){ oper = new OperationDiv(); } return oper; } public static void main(String args[]){ Operation oper = createOperation("+"); oper.NumberA = 1; oper.NumberB = 2; System.out.println(oper.GetResult()); oper = createOperation("-"); oper.NumberA = 1; oper.NumberB = 2; System.out.println(oper.GetResult()); oper = createOperation("*"); oper.NumberA = 1; oper.NumberB = 2; System.out.println(oper.GetResult()); oper = createOperation("/"); oper.NumberA = 1; oper.NumberB = 2; System.out.println(oper.GetResult()); } }  

    代码中我们定义了一个抽象类,包括两个成员NumberA和NmberB,以及一个抽象方法GetResult(),下面分别有四个子类继承了Operation类,并且重写了GetResult()方法,来实现具体的功能,紧接着又定义了一个工厂类OperationFactory,该类有一个方法public static Operation createOperation(String operate),接收一个参数,通过不同的参数来具体实现不同的“生产”,所以最终实现了所需要的结果。

    工厂模式的优点是我们可以很容易扩展自己的类,比如现在要添加一个计算求余的功能,只需要添加以下代码:

    class OperationMod extends Operation{ public double GetResult(){ double result; try{ if(NumberB == 0) throw new Exception(); } catch(Exception e){ System.err.println("不允许对零求余"); } result = NumberA % NumberB; return result; } } //========================================================// else if(operate.equals("%")){ oper = new OperationMod(); } //========================================================// oper = createOperation("%"); oper.NumberA = 1; oper.NumberB = 0; System.out.println(oper.GetResult()); 


    最新回复(0)