设计模式(5) -- 开闭原则

简介: 设计模式(5) -- 开闭原则

开闭原则介绍


46a9d80a6e05e4e3b19d57a0ee70bcdf.png

设计模式中最重要的原则!!!


违反开闭原则的例子


绘制不同图案的例子


66ba272a0bfc97be54a5fa679e3d5482.png

代码

public class Ocp {
    public static void main(String[] args) {
        //使用看看存在的问题
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
    }
}
//这是一个用于绘图的类[使用方]
class GraphicEditor{
    //接收shape对象,根据type,来绘制不同的图形
    public void drawShape(Shape s){
        if (s.m_type == 1){
            drawRectangle(s);
        }else if(s.m_type == 2){
            drawCircle(s);
        }
    }
    public void drawRectangle(Shape r){
        System.out.println("矩形");
    }
    public void drawCircle(Shape r){
        System.out.println("圆形");
    } 
}
//[提供方]
class Shape{
    int m_type;
}
class Rectangle extends Shape{
    Rectangle(){
        super.m_type = 1;
    }
}
class Circle extends Shape{
    Circle(){
        super.m_type = 2;
    }
}


需求:如果添加一个绘制三角形怎么办?


46a9d80a6e05e4e3b19d57a0ee70bcdf.png

66ba272a0bfc97be54a5fa679e3d5482.png

可以看到,使用方也得修改代码。这个就违反了开闭原则。


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


改进方案


66ba272a0bfc97be54a5fa679e3d5482.png

如果新增加一个图形,扩展个实现类(提供方),就实现shape就可以了,使用方不需要改任何一个代码。符合开闭原则。

5d4c6812c8535adbb050f4ddf2e1bce8.png

测试


46a9d80a6e05e4e3b19d57a0ee70bcdf.png

66ba272a0bfc97be54a5fa679e3d5482.png


相关文章
|
6月前
|
设计模式 关系型数据库
【设计模式】软件设置原则-开闭原则
【1月更文挑战第12天】【设计模式】软件设置原则-开闭原则
|
6月前
|
设计模式 安全 Java
Java设计模式七大原则之开闭原则
Java设计模式七大原则之开闭原则
79 0
|
消息中间件 设计模式 存储
【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则
【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则
98 0
|
设计模式 关系型数据库
设计模式 - 六大设计原则之OCP(开闭原则)
在面向对象编程领域中,开闭原则规定软件中的类、对象、模块和函数对扩展应该是开放的,但对修改是封闭的。这意味着 应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。
190 0
设计模式 - 六大设计原则之OCP(开闭原则)
|
设计模式 关系型数据库
设计模式七大原则——开闭原则
设计模式七大原则——开闭原则
设计模式七大原则——开闭原则
|
设计模式 关系型数据库 Java
【不就是Java设计模式吗】代码详解编程中最基础、最重要的设计原则——开闭原则(OCP)
【不就是Java设计模式吗】代码详解编程中最基础、最重要的设计原则——开闭原则(OCP)
【不就是Java设计模式吗】代码详解编程中最基础、最重要的设计原则——开闭原则(OCP)
|
设计模式
【设计模式】软件设计七大原则 ( 开闭原则 )
【设计模式】软件设计七大原则 ( 开闭原则 )
190 0
【设计模式】软件设计七大原则 ( 开闭原则 )
|
设计模式 Java 测试技术
设计模式—— 六:开闭原则
设计模式—— 六:开闭原则
279 0
设计模式—— 六:开闭原则
|
设计模式 关系型数据库
设计模式六大原则(六)----开闭原则
设计模式六大原则(六)----开闭原则
328 0
|
设计模式 关系型数据库 Java
寂然解读设计模式 - 开闭原则
开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类
287 0

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    48
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    63
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    58
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    110
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78