设计模式--6大原则--开闭原则
发布日期:2021-07-01 05:57:08 浏览次数:3 分类:技术文章

本文共 3522 字,大约阅读时间需要 11 分钟。

开闭原则(Open Closed Principle)

开闭原则的核心是:对扩展开放,对修改关闭
白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而不应该修改原有代码来实现变化
开闭原则算是前五种原则的一个抽象总结,前五种是开闭原则的一些具体实现,所以如果使用开闭原则,其实有点虚,因为它没有一个固定的模式,但是最终保证的是提高程序的复用性、可维护性等要求
要使用这一原则还需要结合着它的思想“对扩展开放,对修改关闭”与其他的五大设计原则根据经验来开发项目
大体是这个意思,如果想深究,还需要看看其他的书籍
下面是使用开闭原则的一个简单示例,虽有些不准确,但是是这个意思(领会精神)
定义一个接口,寻找美女

 

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
girls = new ArrayList
(); //静态初始化块 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"));

 

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

 

 

转载地址:https://panda1234lee.blog.csdn.net/article/details/9120531 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:设计模式--6大原则--迪米特法则
下一篇:设计模式之——建造模式

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月27日 14时31分29秒