设计模式--6大原则--开闭原则

转载 2012年03月31日 16:31:19

开闭原则(Open Closed Principle)

开闭原则的核心是:对扩展开放,对修改关闭

白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而不应爱修改原有代码来实现变化

 

开闭原则算是前5中原则的一个抽象总结,前五种是开闭原则的一些具体实现,所以如果使用开闭原则,其实有点虚,因为它没有一个固定的模式,但是最终保证的是提高程序的复用性、可维护性等要求

要使用这一原则还需要结合着它的思想“对扩展开放,对修改关闭”与其他的五大设计原则根据经验来开发项目

大体是这个意思,如果想深究,还需要看看其他的书籍

下面是使用开闭原则的一个简单示例,虽有些不准确,但是是这个意思(领会精神)

定义一个接口,寻找美女

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"));

不过这些设计原则到不是绝对的,而是根据项目需求,实际需求来定夺使用

相关文章推荐

java设计原则 第五篇----开闭原则【Open Close Principle 】

开闭原则,软件实体应该对扩展开放,对修改关闭。一个软件应该通过扩展来改变,而不是通过修改来实现变化。 在项目中难免遇到后期功能的修改,最好的方法不是修改原先的代码,而是在原先代码上,扩展实现新的方法...

面向对象六大原则----开闭原则

Java 中面向对象编程六大原则: 单一职责原则 英文名称是Single Responsibility Principle,简称SRP 开闭原则 英文全称是Open Close Principl...

“开-闭”原则(Open-Closed Principle)

1.1   “开-闭”原则(Open-Closed Principle) 1.1.1 作用 它指导我们如何提高代码的可扩展性! 1.1.2 定义 (1)Open(Open for exte...

设计模式6大原则:开闭原则

  • 2013年05月09日 13:47
  • 84KB
  • 下载

java设计模式六大原则(6):开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得...

设计模式--6大原则--开闭原则

开闭原则(Open Closed Principle) 开闭原则的核心是:对扩展开放,对修改关闭 白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而...

设计模式六大原则(6):开闭原则 .

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对...

设计模式六大原则(6):开闭原则OCP(The Open/Closed Principle )

转载于:http://blog.csdn.net/zhengzhb/article/details/7296944 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。...
  • holon23
  • holon23
  • 2014年02月24日 21:34
  • 488

设计模式六大原则(6):开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对...
  • zhengzhb
  • zhengzhb
  • 2012年02月27日 08:48
  • 71617

【转】设计模式6大原则:开闭原则

设计模式 开闭原则
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式--6大原则--开闭原则
举报原因:
原因补充:

(最多只允许输入30个字)