工厂模式是一种非常常见的设计模式,它包括工厂方法模式和抽象工厂模式两种形式。工厂模式是为了降低类之间的耦合度,而将对象的创建放在工厂中进行。在Java编程中,工厂模式的应用非常广泛,下面以实例介绍Java工厂模式的使用。
一、工厂方法模式
1.定义
工厂方法模式是指定义一个用于创建对象的接口,让子类决定将哪一个类进行实例化。工厂方法是把对象的创建延迟到子类中实现。工厂方法模式可以解决简单工厂模式中工厂类职责过重的问题,而且它能够很好地满足开放封闭原则。
2.实例
下面以一个简单的计算器示例来说明工厂方法模式的实现。首先定义一个运算类Operation,该类会调用工厂方法来实例化具体的运算子类。
```
public class Operation {
private double numberA;
private double numberB;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getResult() {
double result = 0;
return result;
}
}
```
然后定义具体的运算子类AddOperation、SubOperation、MulOperation和DivOperation:
```
public class AddOperation extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() + getNumberB();
return result;
}
}
public class SubOperation extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}
public class MulOperation extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}
public class DivOperation extends Operation {
@Override
public double getResult() {
double result = 0;
if (getNumberB() != 0) {
result = getNumberA() / getNumberB();
}
return result;
}
}
```
最后,定义一个工厂类OperationFactory,用于实例化具体的运算子类:
```
public class OperationFactory {
public static Operation getOperation(String operation) {
Operation oper = null;
switch (operation) {
case "+":
oper = new AddOperation();
break;
case "-":
oper = new SubOperation();
break;
case "*":
oper = new MulOperation();
break;
case "/":
oper = new DivOperation();
break;
}
return oper;
}
}
```
这样,当需要进行运算时,只需要调用工厂方法即可,并且可以通过修改工厂类来添加新的运算子类。
二、抽象工厂模式
1.定义
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种接口的工厂模式。
2.实例
下面以一个具体的手机应用场景为例,来说明抽象工厂模式的实现。首先定义两个抽象类,一个是手机品牌接口,一个是手机操作系统接口:
```
public interface Brand {
void open();
void close();
void call();
}
public interface OS {
void getOS();
}
```
然后分别实现不同品牌的手机和不同操作系统的手机:
```
public class Huawei implements Brand {
@Override
public void open() {
System.out.println("华为手机开机");
}
@Override
public void close() {
System.out.println("华为手机关机");
}
@Override
public void call() {
System.out.println("华为手机打电话");
}
}
public class Xiaomi implements Brand {
@Override
public void open() {
System.out.println("小米手机开机");
}
@Override
public void close() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
public class Android implements OS {
@Override
public void getOS() {
System.out.println("安卓手机操作系统");
}
}
public class IOS implements OS {
@Override
public void getOS() {
System.out.println("苹果手机操作系统");
}
}
```
最后,定义一个手机工厂类,用于实例化不同品牌和不同操作系统的手机:
```
public interface PhoneFactory {
Brand createBrand();
OS createOS();
}
public class HuaweiFactory implements PhoneFactory {
@Override
public Brand createBrand() {
return new Huawei();
}
@Override
public OS createOS() {
return new Android();
}
}
public class XiaomiFactory implements PhoneFactory {
@Override
public Brand createBrand() {
return new Xiaomi();
}
@Override
public OS createOS() {
return new Android();
}
}
public class IPhoneFactory implements PhoneFactory {
@Override
public Brand createBrand() {
return new Huawei();
}
@Override
public OS createOS() {
return new IOS();
}
}
```
这样,在实例化具体的手机时,只需要调用相应的工厂方法即可,可以轻松支持不同品牌和不同操作系统的手机。
扫码咨询 领取资料