`
yjYinformation
  • 浏览: 651 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java Web 设计之道----开闭原则

阅读更多

设计原则之开闭原则

(1)开闭原则:

开闭原则(Open Closed Principle , OCP)是指“软件实体应当对扩展开发,对修改关闭(Software entities should be open for extension , but close for modification )” 此概念是大牛Bertrand Meyer于1988年提出。

“Open for extension ” 意味着模块的行为是可以扩展的。

“Close for modification” 意味着对模块行为进行扩展时,不必改变模块源代码或二进制代码。

简而言之,开闭原则:可以根据需求随意增加新的类,但是不要修改原有的类。

(2)开闭原则设计系统时的优点:

*可扩展程度高,非常灵活。

*可维护性强,无需改动源代码。

(3)如何实现开闭原则:

实现开闭原则的核心在于“抽象”。系统设计时,要区分哪些是变化的部分,哪些是不变的部分。对不变的部分,可以抽象为不变的接口;对于变化的部分,可以进行评估和分类,每个可变的因素都单独进行封装。

 

例子:

接口定义:

package org.yjY.ocp.interfaceOcp;

 

public interface InterfaceShop

{

public String getShoeName();

public String getShoeType();

public int getShoeValue();

}

接口实现:

package org.yjY.ocp.interfaceOcp.impl;

 

import org.yjY.ocp.interfaceOcp.InterfaceShop;

 

 

public class MenShoe implements InterfaceShop

{

private String shoeName;

private String shoeType;

private int shoeValue;

 

public MenShoe(String shoeName,String shoeType,int shoeValue)

{

this.shoeName = shoeName;

this.shoeType = shoeType;

this.shoeValue = shoeValue;

}

@Override

public String getShoeName()

{

return shoeName;

}

@Override

public String getShoeType()

{

return shoeType;

}

@Override

public int getShoeValue()

{

return shoeValue;

}

}

package org.yjY.ocp.interfaceOcp.impl;

 

import org.yjY.ocp.interfaceOcp.InterfaceShop;

 

public class WomenShoe implements InterfaceShop

{

private String shoeName;

private String shoeType;

private int shoeValue;

 

public WomenShoe(String shoeName,String shoeType,int shoeValue)

{

this.shoeName = shoeName;

this.shoeType = shoeType;

this.shoeValue = shoeValue;

}

 

@Override

public String getShoeName()

{

return shoeName;

}

 

@Override

public String getShoeType()

{

return shoeType;

}

 

@Override

public int getShoeValue()

{

return shoeValue;

}

 

}

 

扩展行为:

*男鞋原价大于200元打8折,原价大于150元打8.5折,其他价格一律9折;

*女鞋原价大于200元打7.5折,原价大于150元打8折,其他价格一律8.5折;

 

实现方案:

一、在接口中增加打折方法用于处理降价,此时两个实现该接口的类(MenShoe , WomenShoe )都必须修改,不符合开闭原则

二、在两个类(MenShoe , WomenShoe )中各增加一个方法,此方案好一些,但不是做好方案

三、增加两个类(MenShoeDiscount  , WomenShoeDiscount ),分别用于处理男鞋和女鞋的降价,此方案修改量小,可扩展性强,最符合开闭原则。

package org.yjY.ocp.interfaceOcp.impl;

 

public class MenShoeDiscount extends MenShoe

{

 

public MenShoeDiscount(String shoeName, String shoeType, int shoeValue)

{

super(shoeName, shoeType, shoeValue);

}

 

public int getShoeValue()

{

int shoePrice = super.getShoeValue();

int discount = 0;

if (shoePrice>200)

{

discount = shoePrice*80/100;

}

if (shoePrice>150)

{

discount = shoePrice*85/100;

}

else

{

discount = shoePrice*90/100;

}

return discount;

 }

 

}

package org.yjY.ocp.interfaceOcp.impl;

 

public class WomenShoeDiscount extends MenShoe

{

 

public WomenShoeDiscount(String shoeName, String shoeType, int shoeValue)

{

super(shoeName, shoeType, shoeValue);

}

 

public int getShoeValue()

{

int shoePrice = super.getShoeValue();

int discount = 0;

if (shoePrice>200)

{

discount = shoePrice*75/100;

}

if (shoePrice>150)

{

discount = shoePrice*80/100;

}

else

{

discount = shoePrice*85/100;

}

return discount;

 }

 

}

测试JSP:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" import="org.yjY.ocp.interfaceOcp.impl.*"%>

 

<html>

  <head>

  </head>

  <body>

    <%

    MenShoeDiscount msd = new MenShoeDiscount("男鞋名","男鞋类型",160);

    out.println("鞋子价格:"+msd.getShoeValue());

    %>

  </body>

</html>

 

 

 

 

 

 

分享到:
评论

相关推荐

    Java Web设计模式之OCP(开闭原则)

    开闭原则(Open-Closed Principle,OCP)是软件工程中的一个基本原则,由Bertrand Meyer在1988年提出,它是面向对象设计的核心之一。这个原则规定了软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。这...

    java API设计

    1. **设计原则**:遵循SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则),这有助于创建稳定、可复用的API。此外,还包括DRY(Don't Repeat Yourself)原则,避免重复代码。 2. **...

    【Java毕业设计】本科毕业设计项目-Java电影推荐系统-管理后台.zip

    9. **设计原则**:遵循SOLID原则(单一职责、开闭、里氏替换、接口隔离和依赖倒置),可以使代码更易于理解和维护。 10. **性能优化**:可能涉及到数据库查询优化、缓存策略(如Redis)、负载均衡等手段,提升系统...

    Java程序员应该了解的10个面向对象设计原则

    - 实现开闭原则的关键在于合理地抽象出系统的核心概念和行为。 #### 原则4:单一职责原则 **定义与理解:** 单一职责原则要求一个类只负责一项职责。如果一个类承担了过多的职责,则修改其中一个职责可能会对其他...

    JAVA-WEB应用系统编码规范.doc

    - 遵循SOLID原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。 - 使用设计模式:根据需要采用工厂模式、单例模式、观察者模式等常见设计模式,提高代码复用性和可扩展性。 - 代码结构:...

    《Java项目设计与开发范例》

    2. **面向对象设计原则**:书中可能强调SOLID原则,即单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导开发者创建可维护、可扩展的代码。 3. ...

    Java项目设计与开发范例

    12. **设计原则与模式**:遵循单一职责、开闭原则等设计原则,以及工厂模式、观察者模式等设计模式,能够提高代码的可读性和可维护性。 13. **日志记录**:通过Log4j或SLF4J等日志框架记录程序运行状态,便于问题...

    java课程设计源代码,书店管理系统

    开发者在编写过程中,应注意良好的编程习惯,如注释清晰、命名规范,同时遵循面向对象的设计原则,如单一职责、开闭原则等。在实际运行中,应进行单元测试和集成测试,确保各个模块功能正常,系统整体稳定可靠。 这...

    java毕业设计

    在进行Java毕业设计时,学生还需要了解和遵循软件开发的最佳实践,比如编写清晰的文档,使用合适的命名规范,编写单元测试,以及遵循SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则...

    毕业设计-java代码生成器

    而“java设计类”则暗示了在实现过程中可能运用到面向对象设计原则,如单一职责原则、开闭原则、依赖倒置原则等,以及设计模式,如工厂模式、单例模式、策略模式等,来保证代码的可维护性和可扩展性。 在【压缩包子...

    JAVA2程序设计实务入门

    标签"JAVA2设计"提示我们,书中的内容可能还涉及软件设计原则,如SOLID原则(单一职责、开闭、里氏替换、接口隔离和依赖倒置),以及如何设计出可扩展、可维护的代码结构。书中可能包含对MVC(模型-视图-控制器)...

    java 初学入门--think in java

    学习Java并不仅仅是记住语法,更重要的是理解和实践面向对象的设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。同时,通过实际项目和练习,将理论知识转化为实践经验,是成为熟练...

    Java程序设计EJB、XML与数据库

    学习Java还需要掌握面向对象的设计原则,如单一职责、开闭原则、里氏替换、依赖倒置和接口隔离等。此外,Java SE(标准版)和Java EE(企业版)是两个主要的Java开发平台,其中Java EE提供了用于构建企业级应用的...

    精通Eclipse,Web 开发-Java体系结构工具,框架及整合应用光盘

    关于Java体系结构,我们将探讨软件设计的基本原则,如单一职责、开闭原则等,以及常见设计模式如工厂模式、观察者模式、策略模式等。此外,分层架构(如表现层、业务逻辑层、数据访问层)的构建也是重要部分。 最后...

    Java后端技术面试汇总-副本.pdf

    首先介绍了设计模式的六大原则,包括单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则和迪米特法则。随后,将这些原则应用到实际场景中,并分析了在Spring和MyBatis框架中使用到的设计模式,以及...

    JAVA_WEB编码规范.doc

    - 设计上,推荐遵循面向对象的原则,如单一职责原则、开闭原则等,确保代码的可扩展性和可维护性。 - 常用类的使用应遵循Java库的标准,避免重复造轮子,提高代码复用。 - 日志规范要求清晰记录程序运行过程中的...

    Java信息系统设计与开发实例 代码

    14. **设计原则与模式**:遵循单一职责原则、开闭原则、依赖倒置等设计原则,以及工厂模式、观察者模式等设计模式,能够写出更可读、可维护的代码。 通过深入学习和实践这些知识点,你可以掌握Java信息系统设计与...

    java学习计划,J2EE学习计划,JAVA,J2EE,java学习步骤,j2ee学习步骤

    - 学习设计模式的基本原则和分类,如单一职责、开闭原则等。 - 熟悉常见的设计模式,如工厂模式、适配器模式、装饰器模式等,并能在实际编程中应用。 9. **开发工具**: - 使用IDE,如Eclipse或IntelliJ IDEA,...

    Java实现学生管理系统课程设计.zip

    在这个项目中,我们需要了解类的设计原则,如单一职责原则(SRP)、开闭原则(OCP)等,以及如何使用继承和多态性来增强代码的可扩展性和灵活性。 2. **MVC设计模式**:Model-View-Controller(MVC)设计模式是开发...

    Java Java程序设计 Java学习文档 Java语言

    其次,深入学习Java,你需要理解面向对象设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这些原则有助于编写可维护、可扩展的代码。此外,深入研究集合框架(List、Set、Map接口...

Global site tag (gtag.js) - Google Analytics