java设计模式-开闭原则

来源:互联网 发布:mac下做windows启动盘 编辑:程序博客网 时间:2024/06/05 06:32

开闭原则:一个软件实体应当对扩展开放,对修改关闭。实际的意思就是一个软件实体,能扩展新的需求。对抽象层次(java中包含接口)不能修改。

优点: 可复用性、可扩展性好。

如何能够实现开闭原则:主要存在对不变进行封装,对变化的进行扩展。

例子:

public   class   Apple{

//苹果有营养的

public  boolean isNutrition=true;

//苹果是有大小

public  int  big=0;

//苹果是有重量的

public  int  weight=0;

//苹果是能生吃的

public  void eat{

//write your code;

   }

//苹果是圆圆的

public String shape="circular";

}

/***这一整个都是水果的特点。这样写下来当然这个类是没有问题的。

    但是,当系统需要加上梨子、草莓等等。整个就没有扩展性。只能重复的写类。

    这时就可以对整个水果进行抽象。将共同的属性进行抽象出来作为fruit水果抽象类

** /

public   class   Fruit{

//水果有营养的

public  boolean isNutrition=true;

//水果是有大小

public  int  big=0;

//水果是有重量的

public  int  weight=0;

//水果是能生吃的

public  void eat(){

//write your code;

   }

}

//苹果做继承则为

public   class Apple extends  Fruit{

//苹果是圆圆的

public String shape="circular";

}

 

//梨子

public  class  Pear extends Fruit(){

public String shape="ellipsoid";

}

//整个看起来比较简洁。如果再存在梨子、荔枝、草莓都是同样的做继承

从上面我们封装了fruit各种水果共同属性(当然写的不一定对),对变化的属性形状(可变的属性)

放在继承的类里面。扩展性比较好。当然个人觉得最主要的是如果在一个类里面调用进行替换。

public class  Test{

public  Test(Apple  apple){

 

}

}

public  class  Test2{

 public  Test2(Fruit fruit){

    

   }

}

我们可以 new  Test2(new Apple())、 new  Test2(new Pear())的方式调用,而不需要修改Test2类,只需要继承

Fruit就可以了。如果是Test这种方式写,则我们需要对每种水果进行创建一个TestN的类。

所以开闭原则主要是对不变的进行封装、对变化的进行扩展。

0 0