您的位置:首页 > 运维架构

对于面向对象的软件系统而言,如何提高软件的可维护性和可复用性始终是一个核心问题

2013-09-25 18:56 876 查看


故事分析: 

“韩信带兵,多多益善”,韩信之所以有很大的影响力,一方面归功他建立了很大的功勋;另外一方面是因为他手握重兵。建立很大的功勋甚至是功高盖主,这就直接导致韩信在军队中深得人心,毕竟,作为士兵,很少有不愿意追随一个在战场上无往不胜的领袖的;手握重兵,有合成聚合的原则来说就是对自己统领的士兵将士保持有引用,就是聚合。韩信手中聚合有一大批能征善战的人,随时听从韩信的调遣,这是不能不让刘邦戒备的。而现在,又说了一个自己带兵多多益善的话,这怎能不让刘邦感觉生气呢?

而“普天之下,莫非王土;四海之内,莫非王臣”,韩信拥有士兵,刘邦却拥有天下,何况韩信也并非拥有全部士兵。“君叫臣死,臣不得不死”,刘邦拥有对天下苍生的生杀大权。韩信很清楚,“陛下虽不善统兵,却善御将”。刘邦是拥有一种比韩信更强的“拥有”关系,可以主宰生死,同时也可以主宰韩信的生死。这就相当于合成关系。更重要的是韩信也是合成关系的一个成员,是刘邦的将领。所以说刘邦比韩信更加强悍!

新建大臣的接口:

public interface Minister{   

   public void duty();

}

士兵的接口
public interface Soldier{

    public void duty();

}

   

   韩信对大臣接口的实现

public class Hanxin implements Minister{

   //对士兵的聚合关系

    Soldier[]soldiers;

    public Hanxin(){}   

    public Hanxin(Soldier[]soldiers) {

       super();

       this.soldiers= soldiers;

    }  

    public void duty(){

      System.out.println("我是刘邦的大臣,永远忠实于刘邦");

    } }

士兵A对士兵接口的实现
public class SoldierA implements Soldier{

    public void duty(){

      System.out.println("我是韩信的士兵A");

    } }
      

士兵B对士兵接口的实现 

public class SoldierB implements Soldier{   

    public void duty(){

      System.out.println("我是韩信的士兵B");

    }  }

刘邦类

public class Liubang{

    //拥有大臣

    Minister[]minister;

    public Liubang(){}

   public Liubang(Minister[]minister) {

       super();

       this.minister= minister;

    }

    public void duty()

    {

      System.out.println("我是皇帝,普天之下,莫非王土;四海之内,莫非王臣");

    }  }

建立一个测试类,代码如下:
public class CARPClient{

    public static void main(String[]args)

    {

      //声明并实例化士兵A

       SoldiersoldierA= new SoldierA();

      //声明并实例化士兵B

       SoldiersoldierB= new SoldierB();

       //构造士兵数组

       Soldier[]soldiers = {soldierA,soldierB};

 

      //声明并实例化韩信,同时传入士兵数组

       Ministerhanxin= new Hanxin(soldiers);

 

       //构造大臣数组

       Minister[]minister = {hanxin};

      //声明并实例化刘邦,同时传入大臣数组

       Liubangliubang= new Liubang(minister);

 

      liubang.duty();

 

       //循环输出大臣

       for(Ministeraminister:liubang.getMinister()){

         aminister.duty();

       }

 

    }

}
程序运行结果如下:

我是皇帝,普天之下,莫非王土;四海之内,莫非王臣

我是刘邦的大臣,永远忠实于刘邦

 

已有应用简介: 

      对于面向对象的软件系统而言,如何提高软件的可维护性和可复用性始终是一个核心问题。合成聚合复用原则的合理而充分的使用时非常有利于构建可维护、可复用、可扩展和灵活性好的软件系统。合成聚合复用原则作为一种构造优质系统的手段几乎可以应用到任何环境中去。对于已有的应用这里就不在赘述啦。

温馨提示: 

      合成聚合复用原则虽然几乎可以应用到任何环境中去,但是这个原则也有自己的缺点。因为此原则鼓励使用已有的类和对象来构建新的类的对象,这就导致了系统中会有很多的类和对象需要管理和维护,从而增加系统的复杂性。

      同时,也不是说在任何环境下使用合成聚合复用原则就是最好的,如果两个类之间在符合分类学的前提下有明显的“IS-A”的关系,而且基类能够抽象出子类的共有的属性和方法,而此时子类有能通过增加父类的属性和方法来扩展基类,那么此时使用继承将是一种更好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  soldier
相关文章推荐