抽象工厂模式简单实例

抽象工厂模式

是所有形式的工厂模式中最为抽象和最具有一般性的一种形态,抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类

抽象工厂模式结构图:


抽象工厂模式之数据库操作工厂

抽象工厂类:
package AbstractFactory;

import AbstractProduct.Connection;
import AbstractProduct.Statement;

public interface DBFactory {
    public Connection createConnection();
    public Statement createStatement();
  
}
具体工厂类1:
package ConcreteFactory;

import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteProduct.MysqlConnection;
import ConcreteProduct.MysqlStatement;

public class MysqlFactory implements DBFactory {

	@Override
	public Connection createConnection() {
		return new MysqlConnection();
		
	}
	
	@Override
	public Statement createStatement() {
		return new MysqlStatement();	
	}
}
具体工厂类2:
package ConcreteFactory;

import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteProduct.OracleConnection;
import ConcreteProduct.OracleStatement;

public class OracleFactory implements DBFactory {

	@Override
	public Connection createConnection() {
		return new OracleConnection();	
	}

	@Override
	public Statement createStatement() {
		return new OracleStatement();	
	}
}
抽象产品类A:
package AbstractProduct;

public interface Connection {
     public void connect();
}
抽象产品类B:
package AbstractProduct;

public interface Statement {
     public void executeStatement();
}
具体产品类A1:
package ConcreteProduct;

import AbstractProduct.Connection;

public class MysqlConnection implements Connection {

	@Override
	public void connect() {
		// TODO Auto-generated method stub
		System.out.println("连接mysql数据库");
	}

}
具体产品类A2:
package ConcreteProduct;

import AbstractProduct.Statement;

public class MysqlStatement implements Statement {

	@Override
	public void executeStatement() {
		System.out.println("执行Mysql数据库语句");
	}

}
具体产品类B1:
package ConcreteProduct;

import AbstractProduct.Connection;

public class OracleConnection implements Connection {

	@Override
	public void connect() {
		// TODO Auto-generated method stub
		System.out.println("连接oracle数据库");
	}

}
具体产品类B2:
package ConcreteProduct;

import AbstractProduct.Statement;

public class OracleStatement implements Statement {

	@Override
	public void executeStatement() {
		System.out.println("执行oracle数据库语句");
	}

}
测试类:
package Test;

import AbstractFactory.DBFactory;
import AbstractProduct.Connection;
import AbstractProduct.Statement;
import ConcreteFactory.OracleFactory;

public class test {
	public static void main(String args[]){
		DBFactory factory;
		Connection connection;
		Statement statement;
		factory=new OracleFactory();
		connection=factory.createConnection();
		statement=factory.createStatement();
		connection.connect();
		statement.executeStatement();
	}

}
抽象工厂模式:
测试结果图:


抽象工厂模式优点:
1:抽象工厂模式隔离了类的生产,客户不需要知道什么呗创建
2:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3:增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。





  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值