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框架等都有使用过

  • 相关阅读:
    火狐浏览器处理jquery中:header的问题。
    兼容IE与FF的childNodes问题(ff childNodes)
    前端开发的几个辅助类工具
    固定 vs. 流动 vs. 弹性:哪种布局更适合你?
    由浅入深漫谈margin属性
    Firefox 的 Jetpack 扩展案例分析:Gmail 邮件提醒
    jQuery性能优化
    浅谈.NET中可用的定时器和计时器【上篇】
    现有分布式技术(socket、.net remoting、asp.net webservice、WSE、ES)和wcf的比较及优势
    Mono for Android 4.2初探
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10678889.html
Copyright © 2011-2022 走看看