设计模式的点滴认识

      记得我刚接触设计模式的时候是刚接触编程不到三个月的时间,那时候听说设计模式很厉害,我便拿了本儿《大话设计模式》去看,结果没看到一半就看不下去,应为不知所云...主要是编码经验太少,怎么谈得上设计模式,所以我暂时放弃了。有一次我在做OA的时候我发现切换数据库这个问题很麻烦,请教了很多高人,都说用抽象工厂,因此当我第二次拿起这本书的时候,我就有种相见恨晚的感觉,我知道这个时候我适合看一些设计模式了。废话就不说了进入正题:

 

首先我们在谈工厂的设计模式之前应该了解两个概念一个就是:类别

      类别:是具有相同功能的一类产品。(着重强调的是功能:比如手机和米饭,功能不一样两个不同的类别)

      系列:具有差别的同一类产品称(着重强调在相同的类别上具有的差异,比如步步高手机和诺基亚手机就是两个不同的系列)。

 

 

了解完这连个概念后:我们就为了解工厂有一个基础了

 

      简单工厂就是用户选择产品功能的一个过程,只是简单工厂的把生产产品的这个过程给封装了。用户仅仅只需要选择不而并不需要了解生产的过程,根据这个现实,我们简单工厂模式也就出来了,但是简单工厂的模式不能替代用户选择产品的权利,这是没有点价值的观念。我们要了解简单工厂模式,就应该对接口有所了解,说简单点,接口就是定义和方法的,必须得明白,接口永远是提供给用户的,所以我们的简单工厂的返回类型应该是接口才对。

      那么为什么不把接口直接返回给客户好像还妥当些,但是简单工厂的价值就存在于抽像和封装,越抽象的东西越稳定,这也就是工厂模式的价值之一。

      在简单工厂中我们的客户只考虑实现同样功能的不同产品之间的差异,就比如说我们的SQLDALFactory中类型为接口的方法一样,选择了工厂就选择了功能,所以在简单工厂中客户最看重的就是类别,选择了SQL就不能切换Acess.

       如:   Iuservice   service=SQLDALFactory.createUser();   //选择数据库(注意不能选择用什么数据库了)

 

对于简单工厂来说这是个一维选择;

 

 

 

 

 

那如果要实现二维选择呢?

那就要用到抽象工厂设计模式

首先抽象工厂出了简单工厂的的特点外它对类别和系列的双重选择:

有的时候我们发工资了会考虑我门去买一个我们要用的东西,现在我们就要考虑我们需要的功能(类别),比如我们想看电视,为了实现这个需求我们就得去商场找相关的买点,明白我们需要的功能我们还需要考虑买什么牌子的电视(系列)我们得考虑这两个因素

 

     这个其实就是我们抽象工厂的模型了,首先我们的共能是什么?   数据库!   明白我们要的是数据库的功能了 ,然后我们在选择用什么样的数据库,SQL还是ORACLE

 

     如:string factoryName = ConfigurationSettings.AppSettings["Factoryname"].ToString();//选择哪一个数据库

 

          switch (factoryName)
            {
                case "SDalBaseFactory":
                    return new Divinity_OA.DALFactory.SDalBaseFactory();

                case "ADalBaseFactory":
                    return new Divinity_OA.DALFactory.Acess.ADalBaseFactory();
            }

 

 

注意了这里是我们明白了我们需要数据库而且选择我们需要具体用哪一个数据库数据库(而且我们还可以选择)

 

这样就实现了灵活多变的数据库切换

 

 

在很多时候我们需要根据用户自己的选择来设计我们的程序,怎么定义类别和系列

比如我们在玩3C的时候,有两个选择,一个光明一个黑暗,这个我们就得给他定义序列,对于系列的选择往往替代我们队工厂的选择,应为用户需要的就是体验光明和黑暗里面各个角色的功能。对于功能我们的用类别定义.

所以我们程序怎么设计还得看用户的需要

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值