希赛考试网
首页 > 软考 > 软件设计师

java工厂模式实例

希赛网 2024-06-15 14:57:11

工厂模式是一种非常常见的设计模式,它包括工厂方法模式和抽象工厂模式两种形式。工厂模式是为了降低类之间的耦合度,而将对象的创建放在工厂中进行。在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();

}

}

```

这样,在实例化具体的手机时,只需要调用相应的工厂方法即可,可以轻松支持不同品牌和不同操作系统的手机。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件