📜  使用设计模式工厂的地方 (1)

📅  最后修改于: 2023-12-03 14:49:57.752000             🧑  作者: Mango

使用设计模式工厂的地方

什么是设计模式工厂

设计模式工厂是一种创建型设计模式,它提供了一种创建对象的最佳方式,使得客户端无需知道实际的对象创建过程。它隐藏创建对象的细节,只提供必要的接口供客户端使用。这样,客户端就可以使用接口创建对象,而不用关心创建对象的实现细节。

使用设计模式工厂的地方
1. 应用配置

在应用程序中,我们通常需要使用配置文件来配置应用程序的参数、设置、选项等。通过使用设计模式工厂,我们可以将配置文件中的信息转换为具体的对象。例如,在配置文件中定义一个数据库类型,并使用工厂模式创建该类型的对象。

interface Database{
    void connect();
}

class MySQLDatabase implements Database{
    @Override
    public void connect() {
        System.out.println("Connect through MySQL");
    }
}

class OracleDatabase implements Database{
    @Override
    public void connect() {
        System.out.println("Connect through Oracle");
    }
}

class DatabaseFactory {
    public static Database create(String type){
        switch (type){
            case "MySql":
                return new MySQLDatabase();
            case "Oracle":
                return new OracleDatabase();
            default:
                throw new IllegalArgumentException("Invalid database type: " + type);
        }
    }
}

class Application{
    public static void main(String[] args) {
        String databaseType = "MySql";
        Database database = DatabaseFactory.create(databaseType);
        database.connect();
    }
}
2. 对象池模式

在一些场景中,需要创建大量的对象,但是创建和销毁对象的开销很大。此时,使用对象池模式可以避免重复创建实例,提高系统性能和资源利用率。

interface Connection {
    void connect();
}

class MySQLConnection implements Connection {
    @Override
    public void connect() {
        System.out.println("Connect through MySQL");
    }
}

class ConnectionFactory{
    private static List<Connection> connectionPool = new ArrayList<>();
    static {
        for (int i = 0; i < 10; i++){
            connectionPool.add(new MySQLConnection());
        }
    }
    public static Connection acquire(){
        return connectionPool.remove(0);
    }
    public static void release(Connection connection){
        connectionPool.add(connection);
    }
}

class Application{
    public static void main(String[] args) {
        Connection connection = ConnectionFactory.acquire();
        connection.connect();
        ConnectionFactory.release(connection);
    }
}
3. 注册式单例模式

单例模式是一种非常常用的设计模式,通过它可以保证一个类在应用程序生命周期中只有一个实例。通常,我们需要注册利用某种机制,使得单例对象能够在整个应用程序中共享。这时候可以使用注册式单例模式。

class Singleton {
    private static final Map<String, Singleton> REGISTRY = new HashMap<>();
    private Singleton(){
    }
    public static Singleton getInstance(String name){
        synchronized (REGISTRY) {
            Singleton singleton = REGISTRY.get(name);
            if (singleton == null){
                singleton = new Singleton();
                REGISTRY.put(name, singleton);
            }
            return singleton;
        }
    }
}

以上为使用设计模式工厂的地方。