抽象工厂模式
模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| public class AbstractFactoryTest { public static void main(String[] args) { IDatabaseUtils iDatabaseUtils = new OracleDataBaseUtils(); IConnection connection = iDatabaseUtils.getConnection(); connection.connect(); ICommand command = iDatabaseUtils.getCommand(); command.command(); } }
interface IConnection{ void connect(); } class MySqlConnection implements IConnection{
@Override public void connect() { System.out.println("Mysql connected."); } }
class OracleConnection implements IConnection{
@Override public void connect() { System.out.println("Oracle connected."); } }
interface ICommand{ void command(); }
class MySqlCommand implements ICommand{
@Override public void command() { System.out.println("Mysql command."); } }
class OracleCommand implements ICommand{
@Override public void command() { System.out.println("Oracle command."); } } interface IDatabaseUtils{ IConnection getConnection(); ICommand getCommand(); } class MysqlDataBaseUtils implements IDatabaseUtils{
@Override public IConnection getConnection() { return new MySqlConnection(); }
@Override public ICommand getCommand() { return new MySqlCommand(); } } class OracleDataBaseUtils implements IDatabaseUtils{
@Override public IConnection getConnection() { return new OracleConnection(); }
@Override public ICommand getCommand() { return new OracleCommand(); } }
|
应用场景:程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的具体类时,可以使用抽象工厂。
优点:
1.可以确信你从工厂的到的产品彼此是兼容的。
2.可以避免具体产品到客户端代码之间的紧密耦合。
3.符合单一职责原则。
4.符合开闭原则。
JDK源码中的应用:
1 2
| java.sql.Conection; java.sql.Driver;
|