当前位置:实例文章 » C#开发实例» [文章]简单工厂、工厂方法、抽象工厂模式-这仨货的区别

简单工厂、工厂方法、抽象工厂模式-这仨货的区别

发布人:shili8 发布时间:2023-12-04 10:46 阅读次数:99

在软件开发中,常常会用到工厂模式来创建对象,其中包括简单工厂、工厂方法和抽象工厂模式。这三种工厂模式在实际应用中有着不同的特点和用途。

简单工厂模式:
简单工厂模式是最简单的工厂模式,它通过一个工厂类来创建对象。客户端只需要知道工厂类的名称,而不需要知道具体的产品类。下面是一个简单工厂模式的示例代码:

java
// 定义产品接口
public interface Product {
    void show();
}

// 具体产品类A
public class ConcreteProductA implements Product {
    @Override
    public void show() {
        System.out.println(This is product A);
    }
}

// 具体产品类B
public class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println(This is product B);
    }
}

// 简单工厂类
public class SimpleFactory {
    public Product createProduct(String type) {
        if (A.equals(type)) {
            return new ConcreteProductA();
        } else if (B.equals(type)) {
            return new ConcreteProductB();
        }
        return null;
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        Product productA = factory.createProduct(A);
        productA.show();
        Product productB = factory.createProduct(B);
        productB.show();
    }
}


工厂方法模式:
工厂方法模式是在简单工厂模式的基础上,将工厂类抽象成接口,每个具体产品对应一个具体工厂类。这样可以实现更好的扩展性,每个产品的创建都由对应的工厂类来完成。下面是一个工厂方法模式的示例代码:

java
// 定义产品接口
public interface Product {
    void show();
}

// 具体产品类A
public class ConcreteProductA implements Product {
    @Override
    public void show() {
        System.out.println(This is product A);
    }
}

// 具体产品类B
public class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println(This is product B);
    }
}

// 工厂接口
public interface Factory {
    Product createProduct();
}

// 具体工厂类A
public class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂类B
public class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.show();
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.show();
    }
}


抽象工厂模式:
抽象工厂模式是在工厂方法模式的基础上,将工厂接口抽象成一个抽象工厂类,每个具体工厂类对应一个产品族,可以创建多个产品。下面是一个抽象工厂模式的示例代码:

java
// 定义产品接口
public interface Product {
    void show();
}

// 具体产品类A
public class ConcreteProductA implements Product {
    @Override
    public void show() {
        System.out.println(This is product A);
    }
}

// 具体产品类B
public class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println(This is product B);
    }
}

// 抽象工厂接口
public interface AbstractFactory {
    Product createProductA();
    Product createProductB();
}

// 具体工厂类1
public class ConcreteFactory1 implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ConcreteProductA();
    }

    @Override
    public Product createProductB() {
        return new ConcreteProductB();
    }
}

// 具体工厂类2
public class ConcreteFactory2 implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ConcreteProductA();
    }

    @Override
    public Product createProductB() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        Product productA1 = factory1.createProductA();
        productA1.show();
        Product productB1 = factory1.createProductB();
        productB1.show();

        AbstractFactory factory2 = new ConcreteFactory2();
        Product productA2 = factory2.createProductA();
        productA2.show();
        Product productB2 = factory2.createProductB();
        productB2.show();
    }
}


总结:
简单工厂模式是通过一个工厂类来创建对象,工厂方法模式是将工厂类抽象成接口,每个具体产品对应一个具体工厂类,抽象工厂模式是将工厂接口抽象成一个抽象工厂类,每个具体工厂类对应一个产品族。这三种工厂模式在实际应用中有着不同的特点和用途,可以根据具体的需求来选择合适的工厂模式。

其他信息

其他资源

Top