6大设计原则-开闭原则

2019-05-06  本文已影响0人  stayiwithime

开闭原则

开闭原则是java世界里最基础的设计原则,他指导我们如何建立一个稳定、灵活的系统,先来看开闭原则的定义:
Software entities like classes,modules and functions should be open for extension but close for modifications.(一个软件的实体如类,模块和函数应该对扩展开放,对修改关闭)
我们做一件事,或者选择一个方向,一般要经历三个步骤:what——是什么,why——为什么,How——怎么做(简称3W)(这是完成一个目标的基本过程,可以在各个方面去实践这个过程)。对于开闭原则,我们也采用这个三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则。

  1. 开闭原则的庐山真面目

开闭原则的定义非常明确的告诉我们:软件实体应该对扩展开放,对修改关闭,其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。
那什么又是软件实体呢?软件的实体包括以下几个部分:

public interface IBook {
    String getName();
    int getPrice();
    String getAuthor();
}
public class NovelBook implements IBook {
    private String name;
    private int price;
    private String author;

    public NovelBook(String name, int price, String author) {
        this.name = name;
        this.price = price;
        this.author = author;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public int getPrice() {
        return this.price;
    }

    @Override
    public String getAuthor() {
        return this.author;
    }
}
public class BookStore {
    private final static ArrayList<IBook> bookList = new ArrayList();

    static {
        bookList.add(new NovelBook("天龙八部",3200,"金庸"));
        bookList.add(new NovelBook("巴黎圣母院",5600,"雨果"));
        bookList.add(new NovelBook("悲惨世界",3500,"雨果"));
        bookList.add(new NovelBook("金瓶梅",3500,"兰陵笑笑生"));
    }

    public static void main(String[] args) {
        NumberFormat formatter = NumberFormat.getCurrencyInstance();
        formatter.setMaximumFractionDigits(2);
        System.out.println("---书店卖出售的书籍记录如下:---");
        for(IBook book : bookList){
            System.out.println("书籍名称:"+book.getName()+"\t书籍作者:"+book.getAuthor()+
                    "\t书籍价格:"+formatter.format(book.getPrice()/100.0)+"元");
        }
    }
}

注意:这个地方价格定义为int类型并不是错误,在非金融类的项目中对货币的处理时,一般取2位精度,通常的设计方法是在运算过程中扩大100倍,在需要展示时在缩小100倍,减少精度带来的误差。(这个在计算的时候好像就比较麻烦一点,也不能保证在乘除运算的时候结果一定是整除的,缺点好像还是很明显的,当然仅仅是展示的话没什么问题

那么这样的设计怎么去处理需求变化的情况呢,书籍的价格可能会随着做活动或是其他情况会有折扣调整之类的,现在以打折销售举例:所有40元以上的书籍九折销售,其他的8折销售,有一下三种方法可以处理这种场景:

内容来自《设计模式之禅》

上一篇 下一篇

猜你喜欢

热点阅读