`

开闭原则

    博客分类:
  • Java
阅读更多

开闭原则(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开闭原则

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

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

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

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

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

    JAVA设计模式之设计原则 ---开闭原则源码

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

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

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

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

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

    开闭原则1

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

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

    该怎么使用 Java 设计模式编程中的 OCP 开闭原则? 在软件开发中,开闭原则是面向对象设计中最基础的设计原则之一,它指导我们如何建立稳定灵活的系统。开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放...

    开闭原则OCP.zip

    开闭原则(Open-Closed Principle,简称OCP)是软件设计模式中的一个基本原则,由艾兹格·迪米特里斯·伯纳斯-李提出。这个原则指出,软件实体(类、模块、函数等)应当对扩展开放,对修改关闭。换句话说,当软件...

    python开闭原则.docx

    **开闭原则** 是面向对象设计的一个核心原则,它的主要思想是软件实体(如类、模块、函数等)应当对扩展开放,对修改关闭。这一原则的目的是在系统需要新增功能或修改现有功能时,尽可能地减少对原有代码的改动,以...

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

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

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

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

    论开闭原则在JAVA程序设计中的应用.pdf

    开闭原则是面向对象设计中的一个核心原则,它要求软件实体(例如类、模块、函数等)应该设计成对扩展开放,对修改关闭。这个原则由Bertrand Meyer在1988年提出,旨在确保软件系统能够更容易地应对需求的变化,从而...

    11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?.pdf

    开闭原则是面向对象设计中的一个基本原则,它指导着我们如何设计出可维护、可扩展的软件系统。根据开闭原则,软件实体如模块、类或函数应当对扩展开放,对修改关闭。这意味着当需求发生变化时,我们应当尽可能地通过...

    论开闭原则在JAVA程序设计中的应用.zip

    开闭原则是面向对象设计的基本原则之一,由格里·贝迪奇在其著作《设计模式:可复用面向对象软件的基础》中提出。这个原则主张软件实体(类、模块、函数等)应当对扩展开放,对修改关闭。简单来说,就是在不修改原有...

    开闭原则.rar之java设计模式

    开闭原则是面向对象设计中的一个基本原则,它主张软件实体(包括类、模块、函数等)应当对扩展开放,对修改关闭。这意味着在不改变原有代码的基础上,可以通过增加新的功能来适应需求的变化,从而提高软件的可维护性...

    开闭原则和依赖倒置的例子Java.doc

    开闭原则(Open-Closed Principle,OCP)是软件设计原则之一,它的核心思想是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着在不修改原有代码的基础上,可以通过增加新的代码来扩展功能。在这个...

    读书笔记:单例原则最小知识原则开闭原则.zip

    读书笔记:单例原则最小知识原则开闭原则

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

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

Global site tag (gtag.js) - Google Analytics