zoukankan      html  css  js  c++  java
  • 设计模式(第三式:抽象工厂模式)

    概念:

      抽象工厂模式:为创建一组相关或相互依赖的对象提供一组接口,而且无需指定它们的具体类。

    实现:

      定义书籍接口:

        public interface Book {
        }

      定义工厂接口:

        public interface OperateFactory {
            /**
             * 想数据库中添加一本书
             * @param book 要添加的对象
             */
            void addBook(Book book);
    
            /**
             * 根据id从数据库中删除某个对象
             * @param id
             */
            void delete(Integer id);
    
            /**
             * 根据id从数据库中查询某本书籍
             * @param id 带查询的对象id
             * @return book
             */
            Book getBook(Integer id);
    
            /**
             * 修改数据库中对象
             * @param book
             * @return
             */
            Boolean modify(Book book);
        }

      书籍类别:(小说类书籍、工具类书籍...)

        public class NovelBook implements Book {
    
            private Integer id;
            private String name;
    
            public Integer getId() {
                return id;
            }
    
            public void setId(Integer id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }
        public class NovelBook implements Book {
    
            private Integer id;
            private String name;
    
            public Integer getId() {
                return id;
            }
    
            public void setId(Integer id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
        }

      工厂类别:

        public class MySQLOperateFactory implements OperateFactory {
    
            @Override
            public void addBook(Book book) {
                System.out.println("从mysql中添加一本书");
            }
    
            @Override
            public void delete(Integer id) {
                System.out.println("从mysql中删除id为"+id+"的数据");
            }
    
            @Override
            public Book getBook(Integer id) {
                System.out.println("从mysql中根据id查询一本书");
                return new Book() {
                };
            }
    
            @Override
            public Boolean modify(Book book) {
                System.out.println("从mysql中修改一本书");
                return Boolean.TRUE;
            }
        }
        public class OracleOpareteFactory implements OperateFactory {
            @Override
            public void addBook(Book book) {
                System.out.println("从oracle中添加一本书");
            }
    
            @Override
            public void delete(Integer id) {
                System.out.println("从oracle中删除id为"+id+"的数据");
            }
    
            @Override
            public Book getBook(Integer id) {
                System.out.println("从oracle中根据id查询一本书");
                return new Book() {
                };
            }
    
            @Override
            public Boolean modify(Book book) {
                System.out.println("从oracle中修改一本书");
                return Boolean.TRUE;
            }
        }

      分析:通过代码可以简单的分析一下,有没有觉得和工厂方法模式几乎差不多,就是里面装的方法多了一点,但仔细体会,会有很奇妙的发现,就是有不一样的地放

        1.提高了内聚

        2.方法组上扩展不方便,都得重写接口,这种情况下集成的越多,改动越多,所以可以考虑中加夹层抽象类做缓冲

        3.看上去和工厂方法区别不大,但是真的不一样,不只是方法多了而已,主要的应用层级也不一样,可以感受一下:工厂方法是在乎产品的分类,他操作的是分类的对象,目的是为了方便实现实体类;抽象工厂是在乎工厂中的方  法,它操作的分类对象的接口,即不在乎具体是哪个对象。总体来说抽象工厂注重的层级应该比工厂方法高一些。

        4.适用场景:

          a.有一组对象或者有相同约束。

          ……

      经典框架中使用的:

        Spring框架,hibernate框架,mybatis框架等都有使用过

  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10678889.html
Copyright © 2011-2022 走看看