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

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

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

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

时间: 2024-12-04 20:28:18

设计模式--6大原则--开闭原则的相关文章

[转]设计模式之六大原则——开闭原则(OCP)

原文地址:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793454.html 开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extensio

设计模式之六大原则——开闭原则(OCP)

转载于: http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793454.html 开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extensio

六大设计原则--开闭原则

定义 software entities like classes, modules and functions should be open for extension but closed for modifications. 一个软件实体应该对扩展开放,对修改关闭. 什么是开闭原则 闭原则的定义已经非常明确告诉我们:软件实体应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化.那什么又是软件实体呢?软实体包括以下部分: 项目或软件产品

设计模式之禅之六大设计原则-开闭原则

开闭原则 一:开闭原则的定义        --->一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.        --->我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What——是什么,Why——为什么,How——怎么做(简称3W原则,How取最后一个w)        --->对于开闭原则,我们也采用这三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则? 二:如何使用开闭原则        --->抽象约束.               

11设计模式六大原则——开闭原则

定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统.开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开

学习设计模式 - 六大基本原则之开闭原则

设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregation Principle),D-依赖倒置原则(Dependence Invension Principl

设计模-设计原则-开闭原则

(转)面向对象设计原则之开闭原则 有两个含义: 1.一个实体对修改关闭,对扩展开放 2.其他实体的扩展,不需要(不能)修改本实体 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则.开闭原则由Bertrand  Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进行扩展. 在开闭原则的定义中,软件实体可以指一个软件模块.一个由多个类组成的

设计模式课程 设计模式精讲 3-2 开闭原则 coding

1 课程讲解 2 代码coding 1 课程讲解 2 代码coding 2.1 基类 测试类: package com.geely.design.principle.openclose; public class TestJavaCourse { public static void main(String[] args) { Icourse icourse = new JavaCourse(96,"java开发教程",298.00); System.out.println("

设计模式七大原则(一)开闭原则

设计模式七大原则--开闭原则 1.1 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 用抽象构建框架,用实体扩展细节. 1.2 优点: 提高软件系统的可复用性及可维护性. 1.3 问题由来: 在软件的生命周期中,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码进过重新测试. 1.4 解决方案: 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 实现