抽象工厂模式简单实例

来源:互联网 发布:工业企业分行业数据 编辑:程序博客网 时间:2024/05/01 05:56

抽象工厂模式

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

抽象工厂模式结构图:


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

抽象工厂类:
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 {@Overridepublic Connection createConnection() {return new MysqlConnection();}@Overridepublic 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 {@Overridepublic Connection createConnection() {return new OracleConnection();}@Overridepublic 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 {@Overridepublic void connect() {// TODO Auto-generated method stubSystem.out.println("连接mysql数据库");}}
具体产品类A2:
package ConcreteProduct;import AbstractProduct.Statement;public class MysqlStatement implements Statement {@Overridepublic void executeStatement() {System.out.println("执行Mysql数据库语句");}}
具体产品类B1:
package ConcreteProduct;import AbstractProduct.Connection;public class OracleConnection implements Connection {@Overridepublic void connect() {// TODO Auto-generated method stubSystem.out.println("连接oracle数据库");}}
具体产品类B2:
package ConcreteProduct;import AbstractProduct.Statement;public class OracleStatement implements Statement {@Overridepublic 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:增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。





0 0
原创粉丝点击