zoukankan      html  css  js  c++  java
  • 大话设计模式学习笔记简单工厂 工厂 抽象工厂

    主要内容来源于书上第15章。

    我认为,书中以数据库的设计为例。

    引言:如果不用设计模式,

    那么一个产品,一个类,类太多了,就难以管理,这就出现了简单工厂,对外封装一个接口,在里面用分支判断处理多种产品创建。


    第一要知道简单工厂,利用分支判断实现多种产品的创建。

    缺点:增加新的产品时,就需要修改工厂类。
    这就违反了开放封闭原则:软件实体(类、模块、函数)可以扩展,但是不可修改。

    第二:如何让数据库适用以下变化
    Q1:数据库不止一个,
    Q2:每个数据库都增加(减少)表项


    case1:使用工厂模式
    工厂模式里仅只有一个工厂,
    对于Q1,得另外创建工厂,忽略2个工厂的共性。
    对于Q2,增加对应的表项,更改工厂里对应的函数;

    case2:使用抽象工厂模式
    而抽象工厂模式,
    对于样例中,就是一个数据库,一个工厂。
    抽象工厂模式中,有一个工厂接口,提炼出共性。较好的解决了Q1。
    Q2问题,依然没有解决。

    case3:使用抽象工厂模式+反射+(配置文件)
    从列子中看,是取消了工厂接口。借鉴了简单工厂的程序框架,创建一个控制功能的类。

    使用.net中的反射解决了多个数据库对象的问题,智能生成对象;
    这种方法彻底解决了一个数据库一个工厂的问题,Q1 问题彻底解决。

    对于Q2,影响只有一个类。
    不像单一的抽象工厂,要修改所有的工厂和工厂接口。
    而使用配置文件来配置数据库,可以减少编译代码,大大方便重用。


    ------------

    本人总结后,发现以下问题

    1. c++中没有反射概念,那么如上反射的应用有没有相应的替代方案。

    2.书上15章,使用反射,其中删除了所有的工厂类,新建一个控制类,这里工厂都没有了,那怎么标题标记为:“15.8 用反射+抽象工厂的数据访问程序”


    草草写了下,请指教。

  • 相关阅读:
    VS2010之– Web Development(四)-将WebApplication打包发布到IIS
    .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
    jQuery 二级联动
    ajax实现无刷新两级联动DropDownList
    CheckStyle
    《Thinking in Java》学习笔记(三)
    Java垃圾回收机制[转]
    《Thinking in Java》学习笔记(二)
    MySQL操作的一些优化
    《Thinking in Java》学习笔记(一)
  • 原文地址:https://www.cnblogs.com/titer1/p/2634410.html
Copyright © 2011-2022 走看看