6大设计原则(六)---开闭原则。
来源:互联网 发布:linux smp lock.h 编辑:程序博客网 时间:2024/05/17 07:33
英文名称:Open Closed Principle,OCP
定义:一个软件实体如类、模块和函数应该对扩展开发,对修改关闭。大意:一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。
开闭原则就是java世界里最基础的设计原则。
软件实体包括:
* 项目或软件产品中按照一定的逻辑规则划分的模块
* 抽象和类
* 方法
一个实例:
* IBook定义了数据的三个属性:名称,作者,价格
* BookStore是书店
* NovelBook是一个具体的实现类
public class BookStore {public static List<NovelBooks> listBooks = new ArrayList<NovelBooks>();static{listBooks.add(new NovelBooks("三重门","韩寒",3000));listBooks.add(new NovelBooks("人生","路遥",2400));listBooks.add(new NovelBooks("荆棘鸟","考琳·麦卡洛",5000));listBooks.add(new NovelBooks("从你的全世界路过","张嘉佳",2500));} public static void main(String[] args) {//返回默认的货币格式 NumberFormat formatter = NumberFormat.getCurrencyInstance();for(NovelBooks book: listBooks){System.out.println("书籍名称:"+book.getName()+"\t书籍作者:"+book.getAuthor()+"\t书籍价格:"+formatter.format(book.getPrice()/100.0)+"元");}}}interface IBook{public String getName();public String getAuthor();public int getPrice();}class NovelBooks implements IBook{private int price;private String name;private String author;public NovelBooks(String name,String author,int price) {this.author = author;this.price =price;this.name = name;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn this.name;}@Overridepublic String getAuthor() {// TODO Auto-generated method stubreturn this.author;}@Overridepublic int getPrice() {// TODO Auto-generated method stubreturn this.price;}}需求更改:
当书店推出打折畅销,来获取更多的购买量。书店规定40元以下的书籍8折出售,50元以上的数据9折出售。
那么如果在NovelBooks类中修改getPrice方法就会导致代码修改量变大。
解决方案:
通过扩展实现变化。
遵守开闭原则,对软件实体进行扩展来达到改变需求的目的,而不是修改已经存在的代码。
定义一个打折类offNovelBooks继承自NovelBooks,覆写getPrice方法
public class BookStore {public static List<NovelBooks> listBooks = new ArrayList<NovelBooks>();static{listBooks.add(new OffNovelBooks("三重门","韩寒",3000));listBooks.add(new OffNovelBooks("人生","路遥",2400));listBooks.add(new OffNovelBooks("荆棘鸟","考琳·麦卡洛",5000));listBooks.add(new OffNovelBooks("从你的全世界路过","张嘉佳",2500));} public static void main(String[] args) { //返回默认的货币格式 NumberFormat formatter = NumberFormat.getCurrencyInstance();for(NovelBooks book: listBooks){System.out.println("书籍名称:"+book.getName()+"\t书籍作者:"+book.getAuthor()+"\t书籍价格:"+formatter.format(book.getPrice()/100.0)+"元");}}}interface IBook{public String getName();public String getAuthor();public int getPrice();}class NovelBooks implements IBook{private int price;private String name;private String author;public NovelBooks(String name,String author,int price) {this.author = author;this.price =price;this.name = name;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn this.name;}@Overridepublic String getAuthor() {// TODO Auto-generated method stubreturn this.author;}@Overridepublic int getPrice() {// TODO Auto-generated method stubreturn this.price;}}class OffNovelBooks extends NovelBooks{public OffNovelBooks(String name, String author, int price) {super(name, author, price);// TODO Auto-generated constructor stub}@Overridepublic int getPrice() {int rePrice = super.getPrice();int nowPrice = 0;if(rePrice>4000){nowPrice = rePrice*80/100;}else{nowPrice = rePrice*90/100;}return nowPrice;}}
0 0
- 6大设计原则(六)---开闭原则。
- 设计模式--6大原则--开闭原则
- 设计模式6大原则:开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式6大原则:开闭原则
- 设计模式--6大原则--开闭原则
- 设计模式--6大原则--开闭原则
- 6大设计原则之开闭原则。
- 设计原则利剑六--开闭原则
- 设计原则利剑六--开闭原则
- 设计模式6大原则(6):开闭原则
- 设计模式之6大原则(6)开闭原则
- 6大设计原则(6):开闭原则
- 设计模式6大原则之-开闭原则
- 设计模式6大原则:开闭原则(OCP)
- CentOS6.5安装cuda
- 图像旋转 双线性插值 c++
- Android硬件加速
- Swap Nodes in Pairs
- react native 热潮
- 6大设计原则(六)---开闭原则。
- [iOS] iOS开发的22个奇葩技巧
- Android中监听Home键的4种方法总结
- Error retrieving parent for item: No resource found that matches the given name 'android:TextAppeara
- XSS的常见变换
- 验证注册表单
- jenkins中svn publisher插件使用
- ReactJS修炼之路(一)
- MP3的ID3解析