设计模式六大原则-开闭原则
2013-06-19 14:16
375 查看
今天去面试,碰到一个专业名词——开闭原则(Open Closed Principle)
开闭原则的核心:对扩展开放,对修改关闭。
意思就是:如果后期或者二次开发时,需要对软件改变(如扩展功能),应该通过扩展的方式达到目的,不应该修改原来代码实现目的。
查阅资料,开闭原则是前面五种原则的一个抽象总结,前五种原则是开闭原则的具体实现。有人说开闭原则有点虚,是因为它没有一个固定的模式,但是最终保证的是提高程序的复用性、可维护性等要求。
要使用这一原则还需要结合着它的思想“对扩展开放,对修改关闭”与其他的五大设计原则根据经验来开发项目
大体是这个意思,如果想深究,还需要看看其他的书籍。
下面是我在网上找的一个使用开闭原则的简单示例,虽有些不准确,但是是这个意思(领会精神)
定义一个接口,寻找美女
实现这个接口
场景:大街上
运行结果:
但是如果想独立分出一个外国美女的类别的话(比如增加一个国籍),可以通过修改接口、修改实现类、通过扩展来实现。
如果修改接口,也就意味着修改实现类,这样对项目的变动太大了,所以不推荐
如果修改实现类,这样虽能解决问题,但是明显有些牵强,如果需要其他变动的时候会显得逻辑混乱
所以,通过扩展来实现是最简单的方式
如何扩展:
可以定义一个IForeigner接口继承自IFindGirl,在IForeigner接口中添加国籍属性getCountry(),然后实现这个接口即可,然后就只需要在场景类中做稍微修改就可以了
实现接口
然后在场景类中只需要修改如下代码即可,其他不变
开闭原则的核心:对扩展开放,对修改关闭。
意思就是:如果后期或者二次开发时,需要对软件改变(如扩展功能),应该通过扩展的方式达到目的,不应该修改原来代码实现目的。
查阅资料,开闭原则是前面五种原则的一个抽象总结,前五种原则是开闭原则的具体实现。有人说开闭原则有点虚,是因为它没有一个固定的模式,但是最终保证的是提高程序的复用性、可维护性等要求。
要使用这一原则还需要结合着它的思想“对扩展开放,对修改关闭”与其他的五大设计原则根据经验来开发项目
大体是这个意思,如果想深究,还需要看看其他的书籍。
下面是我在网上找的一个使用开闭原则的简单示例,虽有些不准确,但是是这个意思(领会精神)
定义一个接口,寻找美女
package com.loulijun.chapter6; public interface IFindGirl { //年龄 public int getAge(); //姓名 public String getName(); //长相 public String getFace(); //身材 public String getFigure(); }
实现这个接口
package com.loulijun.chapter6; public class FindGirl implements IFindGirl { private String name; private int age; private String face; private String figure; public FindGirl(String name, int age, String face, String figure) { this.name = name; this.age = age; this.face = face; this.figure = figure; } @Override public int getAge() { return age; } @Override public String getFace() { return face; } @Override public String getFigure() { return figure; } @Override public String getName() { return name; } }
场景:大街上
package com.loulijun.chapter6; import java.text.NumberFormat; import java.util.ArrayList; public class Street { private final static ArrayList<IFindGirl> girls = new ArrayList<IFindGirl>(); //静态初始化块 static { girls.add(new FindGirl("张含韵",23,"可爱型","165cm/47kg")); girls.add(new FindGirl("高圆圆",33,"时尚型","165cm/48kg")); girls.add(new FindGirl("章泽天",19,"清纯型","168cm/47kg")); } public static void main(String args[]) { System.out.println("----------美女在这里----------"); for(IFindGirl girl:girls) { System.out.println("姓名:"+girl.getName()+" 年龄:"+girl.getAge()+ " 长相:"+girl.getFace()+" 身材:"+girl.getFigure()); } } }
运行结果:
----------美女在这里---------- 姓名:张含韵 年龄:23 长相:可爱型 身材:165cm/47kg 姓名:高圆圆 年龄:33 长相:时尚型 身材:165cm/48kg 姓名:章泽天 年龄:19 长相:清纯型 身材:168cm/47kg
但是如果想独立分出一个外国美女的类别的话(比如增加一个国籍),可以通过修改接口、修改实现类、通过扩展来实现。
如果修改接口,也就意味着修改实现类,这样对项目的变动太大了,所以不推荐
如果修改实现类,这样虽能解决问题,但是明显有些牵强,如果需要其他变动的时候会显得逻辑混乱
所以,通过扩展来实现是最简单的方式
如何扩展:
可以定义一个IForeigner接口继承自IFindGirl,在IForeigner接口中添加国籍属性getCountry(),然后实现这个接口即可,然后就只需要在场景类中做稍微修改就可以了
package com.loulijun.chapter6; public interface IForeigner extends IFindGirl { //国籍 public String getCountry(); }
实现接口
package com.loulijun.chapter6; public class ForeignerGirl implements IForeigner { private String name; private int age; private String country; private String face; private String figure; public ForeignerGirl(String name, int age, String country, String face, String figure) { this.name = name; this.age = age; this.country = country; this.face =face; this.figure = figure; } @Override public String getCountry() { // TODO Auto-generated method stub return country; } @Override public int getAge() { // TODO Auto-generated method stub return age; } @Override public String getFace() { // TODO Auto-generated method stub return face; } @Override public String getFigure() { // TODO Auto-generated method stub return figure; } @Override public String getName() { // TODO Auto-generated method stub return name; } }
然后在场景类中只需要修改如下代码即可,其他不变
girls.add(new ForeignerGirl("Avirl",28,"美国","性感型","160cm/45kg"));不过这些设计原则到不是绝对的,而是根据项目需求,实际需求来定夺使用。
相关文章推荐
- 设计模式六大原则提炼
- 设计模式六大原则之三:依赖倒置原则
- 设计模式六大原则(3):依赖倒置原则
- 设计模式六大原则(5):迪米特法则
- 设计模式六大原则之--里氏替代原则(LSP)
- 设计模式六大原则(6):开闭原则
- 设计模式之六大原则(转载)
- 设计模式六大原则(5):迪米特法则
- 设计模式六大原则-OCP
- 设计模式六大原则之五:迪米特法则
- 设计模式六大原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则
- IOS设计模式的六大设计原则之里氏替换原则(LSP,Liskov Substitution Principle)
- 设计模式六大原则5—迪米特原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则之〈里氏替换原则〉
- 【转】设计模式六大原则(4):接口隔离原则
- IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)
- 设计模式值六大原则——里氏替换原则(LSP)