其他分享
首页 > 其他分享> > 【设计模式】开闭原则

【设计模式】开闭原则

作者:互联网

开闭原则

  1. 开闭原则是编程中最基础最重要的设计原则
  2. 一个软件实体如类,模块和函数应该对扩展开放**(对提供方),对修改关闭(对使用方)**。用抽象构建框架,用实
现扩展细节。
  3. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
  4. 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。

看如下的例子,如果要求再扩展一个功能,比如利用163发,那么需要在添加一个类,在sendEmail中添加一个方法,在同类print中继续添加代码。这就未必了对修改关闭的原则。改动地方太多,耦合性增加,也不符合单一职责原则。

class Email2 {
    int e_type;
}
class QQ extends Email2{
    QQ(){
        super.e_type = 1;
    }
}

class Google extends Email2{
    Google(){
        super.e_type = 2;
    }
}

class SendEmail{
    public void print(Email2 e) {
        if(e.e_type == 1) send2();
        else send1();
    }
    public void send1() {
        System.out.println("Google发邮箱");
    }

    public void send2() {
        System.out.println("QQ发邮箱");
    }
}
public class OCPrinciple {
    public static void main(String[] args) {
        SendEmail sendEmail = new SendEmail();
        sendEmail.print(new QQ());
        sendEmail.print(new Google());
    }
}

改为符合开闭原则的代码

改进后的代码,只需要将Email改为一个抽象类,添加一个抽象方法send,添加一个SouHu类作为扩展即可。

abstract class Email2 {
    int e_type;
    public abstract void send();
}
class QQ extends Email2{
    QQ(){
        super.e_type = 1;
    }
    public void send() {
        System.out.println("QQ发邮箱");
    }
}

class Google extends Email2{
    Google(){
        super.e_type = 2;
    }
    public void send() {
        System.out.println("Google发邮箱");
    }
}

class SouHu extends Email2{
    SouHu() {
        super.e_type = 3;
    }
    public void send() {
        System.out.println("SouHu发邮箱");
    }
}

class SendEmail{
    public void print(Email2 e) {
        e.send();
    }
}
public class OCPrinciple {
    public static void main(String[] args) {
        SendEmail sendEmail = new SendEmail();
        sendEmail.print(new QQ());
        sendEmail.print(new Google());
        sendEmail.print(new SouHu());
    }
}

标签:原则,type,void,public,print,设计模式,Email2,class,开闭
来源: https://blog.csdn.net/xt199711/article/details/122191165