`
youyu4
  • 浏览: 440582 次
社区版块
存档分类
最新评论

设计原则--开闭原则

 
阅读更多

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

         开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修改关闭,并没有明确的告诉我们。以前,如果有人告诉我“你进行设计的时候一定要遵守开闭原则”,我会觉的他什么都没说,但貌似又什么都说了。因为开闭原则真的太虚了。

 

例子

定义一个接口,寻找美女

 

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设计模式之设计原则 ---开闭原则源码

    开闭原则是面向对象设计中的一个核心原则,它在JAVA设计模式中占据着重要的地位。这一原则由格里·贝斯提出,旨在指导开发者如何设计可维护和可扩展的软件系统。开闭原则(Open-Closed Principle,OCP)的核心思想是...

    开闭原则----图片缓存

    开闭原则是面向对象设计中的一个基本原则,它由软件工程专家 Bertrand Meyer 在其著作《Object-Oriented Software Construction》中提出。这个原则的核心思想是“对扩展开放,对修改关闭”。简单来说,就是模块应该...

    OO设计原则-里氏替换原则

    里氏替换原则是面向对象编程中一项极其重要的原则,它不仅有助于确保代码的健壮性和可维护性,而且也是实现其他设计原则如开闭原则的基础。通过遵循LSP,我们可以设计出更加优雅、简洁且易于扩展的软件系统。希望...

    什么是开闭原则,java开闭原则

    开闭原则是面向对象设计的核心原则之一,它的全称是"对扩展开放,对修改关闭",即在软件设计过程中,我们希望系统能够容易地添加新功能,同时保持原有代码的稳定性,避免频繁修改。这一原则由 Bertrand Meyer 在他的...

    JAVA开闭原则

    JAVA开闭原则是一种重要的软件设计思想,其核心理念在于提高软件系统的灵活性、稳定性和可维护性。开闭原则强调“对扩展开放,对修改关闭”,即在设计阶段应该确保软件模块能够在不修改原有代码的基础上,通过扩展的...

    24种设计模式介绍与6大设计原则-PDF版 查阅方便

    2. 开闭原则:对扩展开放,对修改关闭,意味着在不修改原有代码的基础上增加新功能。 3. 里氏替换原则:子类必须能够替换掉它们的基类,不影响程序的正确性。 4. 接口隔离原则:避免使用宽泛的接口,尽量细化接口,...

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

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

    Java_面向对象设计原则总结

    5 开闭原则-The Open-Closed Principle (OCP)   二 包的设计原则 6 重用发布等价原则-Release Reuse Equivalency Principle (REP) 7 无环依赖原则-The Acyclic Dependencies Principle (ADP) 8 稳定依赖...

    面型对象设计原则——开闭原则(OCP)的Demo+静态结构图

    开闭原则(Open-Closed Principle,简称OCP)是面向对象设计中的一个核心原则,它在软件工程领域具有举足轻重的地位。该原则由 Bertrand Meyer 在其著作《Object-Oriented Software Construction》中提出,旨在提高...

    该怎么使用Java设计模式编程中的OCP开闭原则?.pdf

    在软件开发中,开闭原则是面向对象设计中最基础的设计原则之一,它指导我们如何建立稳定灵活的系统。开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。然而,开闭原则仅仅告诉我们对扩展开放...

    软件开发的201个原则 -- 中文版.zip

    - **开闭原则**:软件实体应对扩展开放,对修改关闭,意味着应通过扩展而不是修改现有代码来实现新功能。 - **里氏替换原则**:子类型必须能够替换它们的基类型,并且不破坏原有程序的正确性。 - **接口隔离原则*...

    Java Web设计模式之OCP(开闭原则)

    开闭原则(Open-Closed Principle,OCP)是软件工程中的一个基本原则,由Bertrand Meyer在1988年提出,它是面向对象设计的核心之一。这个原则规定了软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。这...

    开闭原则1

    开闭原则是面向对象设计的基本原则之一,由勃兰特·梅耶在1988年提出。这个原则的核心思想是:软件实体(如模块、类、接口和方法)应该对扩展开放,对修改关闭。这意味着在需求变更时,我们可以通过增加新代码来扩展...

    读书笔记:设计原则开闭原则.zip

    读书笔记:设计原则开闭原则

    swift-面向对象设计的设计原则和设计模式

    面向对象设计的原则主要有四个:单一职责原则(Single Responsibility Principle, SRP)、开闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)和依赖倒置原则(Dependency...

    java设计模式---诙谐易懂版

    书中还提到了六大设计原则,包括单一职责原则(Single Responsibility Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface ...

    JAVA设计模式-原则和23种设计模式归纳总结

    本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏替换原则、接口隔离原则、合成复用原则和最少知道原则。然后,资源对23种设计模式进行了分类和总结,包括创建型模式、结构型模式和行为型模式...

    该怎么使用Java设计模式编程中的OCP开闭原则?.docx

    在软件设计中,OCP 开闭原则是其中一个非常重要的设计原则。该原则定义了一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。也就是说,当软件需要变化时,应该尽量通过扩展软件实体的行为来实现变化,而...

Global site tag (gtag.js) - Google Analytics