欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Java设计模式—面向对象设计原则(一) ----->开闭原则OCP(完整详解,附有代码+案例)

Java设计模式—面向对象设计原则(一) ----->开闭原则OCP(完整详解,附有代码+案例)

2025/2/8 2:51:10 来源:https://blog.csdn.net/weixin_54555405/article/details/142139224  浏览:    关键词:Java设计模式—面向对象设计原则(一) ----->开闭原则OCP(完整详解,附有代码+案例)

开闭原则

    • 3.1开闭原则
      • 3.1.1 概述
      • 3.1.2 案例

3.1开闭原则

开闭原则:Open Close Principle,OCP

3.1.1 概述

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

3.1.2 案例

如下,分析搜狗输入法皮肤设计:
分析:搜狗输入法的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根绝自己的喜爱更换不同的输入法皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以将这些共同的的特点抽取到一个抽象类(AbstractSkin)中,而每个具体的皮肤(DefaultSkin、MySkin)是其子类。用户可以根据需要选择或者增加新的主题,而不需要修改原代码。

在这里插入图片描述

// 抽象类
public abstract class AbstractSkin {public abstract void displaySkin();
}
=========================================================//实现类public class DefaultSkin extends AbstractSkin{@Overridepublic void displaySkin() {System.out.println("这是默认皮肤...");}
}
=========================================================//实现类public class MySkin extends AbstractSkin{@Overridepublic void displaySkin() {System.out.println("这是自己的皮肤...");}
}
=========================================================/*** 实现聚合的类*/
public class SouGouInput {//成员变量是AbstractSkin类型,(实现聚合)private AbstractSkin skin;public void setSkin(AbstractSkin skin) {this.skin = skin;}//普通方法public void display(){//根据设置(setXxx)的成员变量的不同,来调用不同成员变量的皮肤//这里的成员变量类型是抽象类型,//所以是根据传递不同实现类的对象而调用不同的实现类里重写后的方法来显示不同的皮肤skin.displaySkin();}
}
=========================================================
//测试类public class ClinentTest {public static void main(String[] args) {//1. 创建搜狗输入法对象,将各种皮肤聚合到一起SouGouInput sgi = new SouGouInput();// 2.创建皮肤对象//2.1 常规// DefaultSkin ds = new DefaultSkin();// 2.2多态AbstractSkin ds = new DefaultSkin();MySkin ms = new MySkin();// 3.将皮肤设置到输入法中sgi.setSkin(ds);// sgi.setSkin(ms);// 4.显示皮肤sgi.display();//这是默认皮肤...//当有新的输入法皮肤时候,只需重新创建一个皮肤类去继承抽象类,
//然后重写里面的抽象方法,再在测试类中添加即可。而不用修改之前的代码}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com