工厂方法模式的核心思想就是为每种产品定义一个创建工厂方法的工厂类,核心就是面向接口编程
成员包含:
(1)产品接口,工厂接口
(2)产品实现类,工厂实现类
csharp
产品接口和具体产品类
// 产品接口
interface Product {
void use();
}
// 具体产品A
class ProductA implements Product {
@Override
public void use() {
System.out.println("Using ProductA");
}
}
// 具体产品B
class ProductB implements Product {
@Override
public void use() {
System.out.println("Using ProductB");
}
}
工厂接口和具体工厂类
// 工厂接口
abstract class ProductFactory {
public abstract Product createProduct();
}
// 具体工厂A,负责创建ProductA
class ProductAFactory extends ProductFactory {
@Override
public Product createProduct() {
return new ProductA();
}
}
// 具体工厂B,负责创建ProductB
class ProductBFactory extends ProductFactory {
@Override
public Product createProduct() {
return new ProductB();
}
}
客户端代码
public class Client {
public static void main(String[] args) {
// 使用工厂A创建产品A
ProductFactory factoryA = new ProductAFactory();
Product productA = factoryA.createProduct();
productA.use(); // 输出:Using ProductA
// 使用工厂B创建产品B
ProductFactory factoryB = new ProductBFactory();
Product productB = factoryB.createProduct();
productB.use(); // 输出:Using ProductB
}
}
抽象工厂:和工厂方法模式相似,只是多了产品族这个概念
抽象工厂模式是用于创建一系列相关或相互依赖的对象,这个模式强调的是"产品族"的概念
如下,一个工厂实现,可以创建多个相同产品族的产品。
csharp
// 抽象产品接口 - Chair
interface Chair {
void sitOn();
}
// 抽象产品接口 - Table
interface Table {
void placeOn();
}
// 具体产品 - Victorian Chair
class VictorianChair implements Chair {
@Override
public void sitOn() {
System.out.println("Sitting on a Victorian chair.");
}
}
// 具体产品 - Modern Chair
class ModernChair implements Chair {
@Override
public void sitOn() {
System.out.println("Sitting on a modern chair.");
}
}
// 具体产品 - Victorian Table
class VictorianTable implements Table {
@Override
public void placeOn() {
System.out.println("Placing on a Victorian table.");
}
}
// 具体产品 - Modern Table
class ModernTable implements Table {
@Override
public void placeOn() {
System.out.println("Placing on a modern table.");
}
}
// 抽象工厂接口
interface FurnitureFactory {
Chair createChair();
Table createTable();
}
// 具体工厂 - Victorian Furniture Factory
class VictorianFurnitureFactory implements FurnitureFactory {
@Override
public Chair createChair() {
return new VictorianChair();
}
@Override
public Table createTable() {
return new VictorianTable();
}
}
// 具体工厂 - Modern Furniture Factory
class ModernFurnitureFactory implements FurnitureFactory {
@Override
public Chair createChair() {
return new ModernChair();
}
@Override
public Table createTable() {
return new ModernTable();
}
}