最近在看大话设计模式,为了加深印象,记录一下学习过程。
第一个模式:简单工厂模式,此模式为大话设计模式中第一个设计模式,虽然此模式不属于23种GOF设计模式之一。
简单工厂模式中包含的角色:
工厂类:工厂类利用多态的特性,可以根据客户端的需求,创建不同的具体实现类,并返回一个父类对象
抽象类(父类):如果一些类都需要有同样的方法,可以为这些类抽出一个抽象类作为父类
具体业务实现类(子类):具体的实现类,继承父类,重写父类方法,处理自己的业务逻辑
以一个简单的计算器来举例,假如计算器有加、减、乘、除四种操作,可以为这四种操作抽象出一个父类Operation
/**
* 抽象类
*/
public abstract class Operation {
public abstract double compute(double numberA,double numberB);
}
加法操作类AddOperation
/**
* 加法操作类(具体实现类)
*/
public class AddOperation extends Operation{
@Override
public double compute(double numberA,double numberB) {
return numberA+numberB;
}
}
减法操作类
/**
* 减法操作类(具体实现类)
*/
public class SubtractOperation extends Operation{
public double compute(double numberA, double numberB) {
return numberA-numberB;
}
}
乘法操作类
/**
* 乘法操作类(具体实现类)
*/
public class MultiplyOperation extends Operation{
public double compute(double numberA, double numberB) {
return numberA*numberB;
}
}
除法操作类
/**
* 除法操作类(具体实现类)
*/
public class DivideOperation extends Operation {
public double compute(double numberA, double numberB) {
return numberA/numberB;
}
}
工厂类:
/**
* 工厂类
*/
public class OperationFactory {
public static Operation createOperation(String type){
Operation operation;//抽象类
if("+".equals(type)){
operation=new AddOperation();//具体的实现类
return operation;
}else if("-".equals(type)){
operation=new SubtractOperation();
return operation;
}else if("*".equals(type)){
operation=new MultiplyOperation();
return operation;
}else if("/".equals(type)){
operation=new DivideOperation();
return operation;
}
return null;
}
}
客户端:
public class Test {
public static void main(String[] args) {
//通过工厂去实例化一个加法操作类,并以Operation类返回
Operation operation=OperationFactory.createOperation("+");
System.out.println(operation.compute(100,200));//Operation由加法操作类实例化,即调用加法操作类的compute进行加法计算
}
}
参考:
(1)大话设计模式
(2)http://blog.csdn.net/weiwenlongll/article/details/6918164