你的位置:首页 > ASP.net教程

[ASP.net教程]浅析JAVA设计模式(一)


       第一写技术博客,只是想把自己一天天积累的东西与大家分享。今天在看《大型网站架构和java中间件》这本书时,其中提到代理模式的动态代理。作为java中间件的一个重要基础,我觉的有必要整理和分析下java的23种设计模式,如有不对的地方,请大家留贴指正。

     一、设计模式的分类

   总体来说,Java的设计模式分为三个大类(创建型模式、结构型模式、行为型模式)

   创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

   结构型模式:适配器模式、装饰模式、代理模式、外观模式(又称门面模式)、桥接模式(桥梁模式)、组合模式、享元模式。

   行为型模式:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

   在讲设计模式前,先来说说java设计模式的六大原则。

    二、JAVA设计模式的六大原则

    1、单一职责原则:SRP(Single Responsibility Principle)职责单一,定义为有且只有一个因素引起类或接口的改变。顾名思义就是说针对不同的类或接口定义方法单一的方法,这里的单一不是说只定义一个方法,是指一类行为的方法。

例如:类A负责两个不同的职责:职责A1,职责A2。当由于职责A1需求发生改变而需要修改类A时,有可能会导致职责A2功能发生改变,导致程序出现异常。这时就需要将类A拆分为两个不同的类或者接口去执行不同的职责。

举个例子说明下:

 1 public interface IStudent {    2   //身高 3   void tHeigh(double height);    4   double getHeigh(); 5    //体重  6   void setWeight(double weight);  7   double getWeight(); 8    //吃饭 9   boolean brunch(boolean hungry);10    //游戏11   boolean playGame(boolean free); 12 } 

这个接口定义的职责就很不清晰。因此我们可以将它拆分为两个接口IStudentBo,IStudentAction。

属性接口IStudentBO:

public interface IStudentBO {   //身高   void setHeight(double height);    double getHeight();   //体重   void setWeight(double weight);   double getWeight(); } 

 行为接口IStudentAction:

public interface IStudentAction{boolean brunch(boolean hungry);boolean playGame(boolean free);}

然后各自定义实现类去实现各种的接口方法。这样将属性方法和行为方法分割开来,各自类不会受到多点的因素而发生改变。这个就是所谓的单一职责。是不是很简单呢。当然我们只能尽量去遵守单一职责原则。具体还得看项目需求。至少在后面讲到的部分设计模式就违背了单一职责原则。