实验一 工厂方法和抽象工厂模式设计实验及其Java实现
时间: 2023-10-09 17:11:10 浏览: 134
1. 实验目的
了解工厂方法和抽象工厂模式的概念,理解它们的应用场景和优缺点,掌握Java语言实现这两种模式的方法。
2. 实验内容
(1) 工厂方法模式
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定实例化哪个类。工厂方法模式将对象的实例化延迟到子类中进行,从而避免了在代码中直接使用new关键字来创建对象,使代码更加灵活。
具体实现步骤如下:
1. 定义一个抽象产品类Product和一个具体产品类ConcreteProduct。
```java
public abstract class Product {
public abstract void doSomething();
}
public class ConcreteProduct extends Product {
@Override
public void doSomething() {
System.out.println("do something in ConcreteProduct");
}
}
```
2. 定义一个抽象工厂类Factory和一个具体工厂类ConcreteFactory,其中Factory中定义了一个抽象的工厂方法createProduct(),由子类来实现该方法创建具体的产品对象。
```java
public abstract class Factory {
public abstract Product createProduct();
}
public class ConcreteFactory extends Factory {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
```
3. 在客户端代码中使用工厂方法来创建产品对象,具体的对象类型由具体的工厂类来决定。
```java
public class Client {
public static void main(String[] args) {
Factory factory = new ConcreteFactory();
Product product = factory.createProduct();
product.doSomething();
}
}
```
(2) 抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有相同主题的单独工厂。抽象工厂模式可以帮助客户端代码创建一组相关的对象,而无需指定它们的具体类。
具体实现步骤如下:
1. 定义抽象产品类ProductA和ProductB以及它们的具体实现类ConcreteProductA和ConcreteProductB。
```java
public abstract class ProductA {
public abstract void doSomething();
}
public class ConcreteProductA extends ProductA {
@Override
public void doSomething() {
System.out.println("do something in ConcreteProductA");
}
}
public abstract class ProductB {
public abstract void doSomething();
}
public class ConcreteProductB extends ProductB {
@Override
public void doSomething() {
System.out.println("do something in ConcreteProductB");
}
}
```
2. 定义抽象工厂类AbstractFactory和具体工厂类ConcreteFactory1和ConcreteFactory2,其中AbstractFactory中定义了创建产品A和产品B的抽象方法createProductA()和createProductB(),由子类来实现这两个方法创建具体的产品对象。
```java
public abstract class AbstractFactory {
public abstract ProductA createProductA();
public abstract ProductB createProductB();
}
public class ConcreteFactory1 extends AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB();
}
}
public class ConcreteFactory2 extends AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB();
}
}
```
3. 在客户端代码中使用抽象工厂来创建一组相关的对象,具体的对象类型由具体的工厂类来决定。
```java
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new ConcreteFactory1();
ProductA productA = factory.createProductA();
ProductB productB = factory.createProductB();
productA.doSomething();
productB.doSomething();
}
}
```
3. 实验总结
本次实验学习了工厂方法模式和抽象工厂模式的概念、应用场景和实现方法,并通过Java语言编写了相应的代码进行了实现。工厂方法模式能够将对象的实例化延迟到子类中进行,提高了代码的灵活性;而抽象工厂模式则提供了一种方式来封装一组具有相同主题的单独工厂,帮助客户端代码创建一组相关的对象,而无需指定它们的具体类。
阅读全文