• 设计模式(第三式:抽象工厂模式)


    概念:

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

    实现:

      定义书籍接口:

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

  • 相关阅读:
    Silverlight中弹出网页
    Silverlight中嵌套html、swf、pdf
    silverlight 用户浏览器未安装SL插件问题
    silverlight视频、音频
    Silverlight形状、画笔、变换、图像处理、几何图形
    Silverlight动画学习笔记(三):缓动函数
    Silverlight动画的基本知识、关键帧动画
    Silverlight独立存储
    关于Silverlight调用天气预报接口问题
    c#获取今天星期几
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10678889.html
Copyright © 2020-2023  润新知