抽象工厂模式

2018-10-12  本文已影响11人  fomin

1、概述

抽象工厂模式是一种创建型模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。


图片

2、模式结构

3、使用场景

4、优缺点

优点:

缺点:

5、实例

项目中可能会遇到需要多种数据库来操作数据,例如,mysql和sqlserver数据库,这样需要访问数据和业务逻辑解耦。
首先创建两个实体Book和User

public class Book {
    private int bookId;
    private String bookName;

    public Book(int bookId,String bookName){
        this.bookId=bookId;
        this.bookName=bookName;
    }

    public int getBookId() {
        return bookId;
    }

    public String getBookName() {
        return bookName;
    }
}

public class User {
    private int userId;
    private String userName;

    public User(int userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }

    public int getUserId() {
        return userId;
    }

    public String getUserName() {
        return userName;
    }
}

其次,创建两个抽象产品IBook和IUser

public interface IBook {
    int add(Book book);

    int remove(int bookId);
}

public interface IUser {
    int add(User user);

    int remove(int userId);
}

根据数据库实现不同的产品

public class SqlServerBook implements IBook {
    @Override
    public int add(Book book) {
        return 0;
    }

    @Override
    public int remove(int bookId) {
        return 0;
    }
}

public class MySqlBook implements IBook {
    @Override
    public int add(Book book) {
        // 具体的mysql数据库操作
        return 0;
    }

    @Override
    public int remove(int bookId) {
        return 0;
    }
}

public class MySqlUser implements IUser {

    @Override
    public int add(User user) {
        return 0;
    }

    @Override
    public int remove(int userId) {
        return 0;
    }
}

public class SqlServerUser implements IUser {
    @Override
    public int add(User user) {
        // 具体的sqlServer数据库操作
        return 0;
    }

    @Override
    public int remove(int userId) {
        return 0;
    }
}

定义一个访问数据库的抽象工厂接口

public interface IFactory {
    IBook addBook();

    IUser addUser();
}

创建两个具体工厂SqlServerFactory和MySqlFactory

public class MySqlFactory implements IFactory {
    @Override
    public IBook addBook() {
        return new MySqlBook();
    }

    @Override
    public IUser addUser() {
        return new MySqlUser();
    }
}

public class SqlServerFactory implements IFactory {
    @Override
    public IBook addBook() {
        return new SqlServerBook();
    }

    @Override
    public IUser addUser() {
        return new SqlServerUser();
    }
}

客户端代码:

public static void main(String[] args) {
    User user = new User(1, "test");
    IFactory factory = new SqlServerFactory();// 可以换成MySqlFactory
    IUser iu = factory.addUser();
    iu.add(user);
}
上一篇下一篇

猜你喜欢

热点阅读