1.2个特性
遵循开闭原则设计的模块具有两个主要特征:
对于扩展是开放的,这就需要我们设计软件是可以扩展的,不仅仅局限于当前一根场景下
对于修改是关闭的,这是说当我们进行扩展的时候,是不需要更改原有的代码的,保证了之前代码的完整性
代码示例
package org.liufeng.course.DesignPattern; /** * java设计模式-开放封闭原则 * @Author wangkun * @Date 2016/9/7 10:30 */ public interface FindPerson { public int getAge(); public String getFace(); public String getName(); }
package org.liufeng.course.DesignPattern.impl; import org.liufeng.course.DesignPattern.FindPerson; /** * @Author wangkun * @Date 2016/9/7 10:32 */ public class FindMan implements FindPerson { private String name; private int age; private String face; public FindMan(String name,int age,String face){ this.name=name; this.age=age; this.face=face; } @Override public int getAge() { return age; } @Override public String getFace() { return face; } @Override public String getName() { return name; } }扩展方法
刚才我们测试方法可以找出张三,李四,但是我想说我找的这个人是外国人,怎么办?我们该怎么修改写好的提示?首先我们需要写一个接口,继承找人接口,只不过我们需要添加一个方法,变成外国人 如下:
package org.liufeng.course.DesignPattern; /** * @Author wangkun * @Date 2016/9/7 11:45 */ public interface FindForeignPerson extends FindPerson { public String getCountry(); }
然后,实现这个接口,如下:
package org.liufeng.course.DesignPattern.impl; import org.liufeng.course.DesignPattern.FindForeignPerson; /** * @Author wangkun * @Date 2016/9/7 11:47 */ public class FindForeignMan implements FindForeignPerson { private String name; private String country; private int age; private String face; public FindForeignMan(String name,int age,String face,String country){ this.name=name; this.country=country; this.age=age; this.face=face; } @Override public String getCountry() { return country; } @Override public int getAge() { return 0; } @Override public String getFace() { return null; } @Override public String getName() { return null; } }最后测试代码如下:
package org.liufeng.course.DesignPattern; import org.liufeng.course.DesignPattern.impl.*; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; /** * @Author wangkun * @Date 2016/9/6 17:03 */ public class Test { public static void main(String[] args) { List<FindForeignMan> personList=new ArrayList<FindForeignMan>(); personList.add(new FindForeignMan("小王", 23,"椭圆形","英国")); personList.add(new FindForeignMan("蓉蓉", 21,"圆形","日本")); for(FindForeignMan persons:personList){ System.out.println("persons:"+persons.getCountry()); } } }这样,我们在不修改之前代码的前提下,进行扩展,这就是开放封闭原则