📅  最后修改于: 2023-12-03 14:49:57.752000             🧑  作者: Mango
设计模式工厂是一种创建型设计模式,它提供了一种创建对象的最佳方式,使得客户端无需知道实际的对象创建过程。它隐藏创建对象的细节,只提供必要的接口供客户端使用。这样,客户端就可以使用接口创建对象,而不用关心创建对象的实现细节。
在应用程序中,我们通常需要使用配置文件来配置应用程序的参数、设置、选项等。通过使用设计模式工厂,我们可以将配置文件中的信息转换为具体的对象。例如,在配置文件中定义一个数据库类型,并使用工厂模式创建该类型的对象。
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();
}
}
在一些场景中,需要创建大量的对象,但是创建和销毁对象的开销很大。此时,使用对象池模式可以避免重复创建实例,提高系统性能和资源利用率。
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);
}
}
单例模式是一种非常常用的设计模式,通过它可以保证一个类在应用程序生命周期中只有一个实例。通常,我们需要注册利用某种机制,使得单例对象能够在整个应用程序中共享。这时候可以使用注册式单例模式。
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;
}
}
}
以上为使用设计模式工厂的地方。