您的位置:建站学院首页 >> 文章 >> JSP技术 >> 设计模式
走下神坛的设计模式--设计模式入门

走下神坛的设计模式--设计模式入门 

首先,为什么要有设计模式,主要的目的就是软件重用了。辛辛苦苦写的代码,没怎么用就扔掉,不是太可惜了么。但是代码质量太差,用了 
会出错也不行。所以我们要尽量写出可以重用的代码。 

我们的目标就是代码重用和维护方便,说白了,就是

1.少写重复代码

2.尽量不修改已经完成的代码

3.如果要增加功能,最好是通过添加新的类,而不是修改现有代码。

4.一定要修改的话,也要容易修改,并且不会或尽量少影响到其他。

5.... 

设计模式就是教我们如何在前辈们的经验上,写出可以满足上面条件的代码。

现在都是面向对象了,所以主要考虑的都是基于对象的重用。使用一个对象分为3步:

1.创建/取得一个对象

2.操作这个对象的方法以改变对象状态

3.销毁这个对象。

所以如何创建一个对象就是第一个要考虑的问题,也就有了创建模式。

操作对象呢就是行为模式了。

销毁一个对象比较容易,但是会经常忘,小心点就是了,其模式大概不多。java基本上不用太多考虑这个问题,所以也就管杀不管埋了。

对象之间还有一些复杂关系,来描述一些复杂的事务,当然就是结构模式了。 

既然创建对象是第一步,那就从创建模式说起。如果创建一个对象呢,最简单也是最标准的当然是new了

MyClass obj=new MyClass(); 

有什么问题么?如果就这么简单当然没问题,但是如果创建一个对象不这么简单呢?比如你要建一个数据库连接,那可不是一个new就能完成的 。

如下:

   String    drv = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

   String    url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";

   String    uid = "sa";

   String    pwd = "123456"; 



   Connection cn=null;

   try

   {

     Class.forName(drv).newInstance();

     cn=DriverManager.getConnection(url,uid,pwd);

   }

   catch (Exception e)

   {

   e.printStackTrace();

   } 



这么麻烦,你不会每次生成一个数据库连接的时候,都写这么多代码吧?怎么办,粘贴拷贝是个办法,不过一般都是写个方法了。方法不会独 
立存在,需要一个class 

public DBManager

{

   public static Connection getCn()

   {

   String    drv = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

   String    url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";

   String    uid = "sa";

   String    pwd = "123456"; 



   Connection cn=null;

   try

   {

     Class.forName(drv).newInstance();

     cn=DriverManager.getConnection(url,uid,pwd);

   }

   catch (Exception e)

   {

   e.printStackTrace();

   }

   return cn;

   }



这样每次不用ctrl+c,ctrl+v了。你的代码里都是方法调用,看起来也简洁一些。这就是一个工厂方法,而且是静态工厂,为什么用静态工厂, 
因为没什么状态需要工厂保存,所以用静态方法比较好,还不用创建一个工厂实例。为啥叫工厂,这是个比喻了,工厂生产产品,在这里就专 
门生产对象了。比喻比较恰当,也好记一点。最好我们把例子改一下名字。

public DBFactory

{

   public static Connection getCn()

   {

   String    drv = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

   String    url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";

   String    uid = "sa";

   String    pwd = "123456"; 



   Connection cn=null;

   try

   {

     Class.forName(drv).newInstance();

     cn=DriverManager.getConnection(url,uid,pwd);

   }

   catch (Exception e)

   {

   e.printStackTrace();

   }

   return cn;

   }



推而广之,凡是不是调用者用new生成,而用其他的对象间接生成的对象,都可以看作是广义工厂方法。凡是不能简单的用一个new生成的对象 都可以考虑用工厂方法。好处就是,嘿嘿,少写几行代码了。另外,创建对象的方法有改变时,只改工厂,调用者不用改。别忘了我们的目标 是代码重用。 

如果一个工厂只生产一个产品,那不成作坊了,所以让这个工厂多干点事吧,上面的工厂要是能生成不同数据库的连接该多好啊。可以啊,代 
码修改一下:

public DBFactory

{

   public static Connection getCn(drv,url,uid,pwd)

   { 



   Connection cn=null;

   try

   {

     Class.forName(drv).newInstance();

     cn=DriverManager.getConnection(url,uid,pwd);

   }

   catch (Exception e)

   {

   e.printStackTrace();

   }

   return cn;

   }

}

于是这个工厂就可以生产各种数据库连接了。凑巧的是,jdbc可以用java的反射机制,实现一段代码,生成不同的jdbc,如果不是jdbc,很有 可能要通过if else写好多代码了。不过总好过每个地方都粘贴代码吧。另外还可以通过配置文件生成jdbc的参数,这些就是更细的实现方式了 ,不必详谈了。 

这就是简单工厂方法(静态工厂)的来历。 

大师们用好几章写的设计模式创建模式,不会就这么简单吧?

呵呵,当然不会,且听下回分解。

本内容共2页  首 页  上一页  下一页  尾 页  当前在第1

Google
 
Web www.cqxw.net