博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开闭原则
阅读量:4097 次
发布时间:2019-05-25

本文共 2497 字,大约阅读时间需要 8 分钟。

1、定义

开闭原则,对于扩展是开放的,对于修改是关闭。

OCP_Diagram.png

2、实现

(1)创建书籍接口

interface IBook {    String getName();    int getPrice();    String getAuthor();}

(2)创建计算机书籍接口

interface IComputerBook extends IBook {    public String getScope();}

(3)实现小说类

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 name;    }    @Override    public int getPrice() {        return price;    }    @Override    public String getAuthor() {        return author;    }}

(4)实现计算机书籍类

class ComputerBook implements IComputerBook {    private String name;    private int price;    private String author;    private String scope;    public ComputerBook(String name, int price, String author, String scope) {        this.name = name;        this.price = price;        this.author = author;        this.scope = scope;    }    @Override    public String getName() {        return name;    }    @Override    public int getPrice() {        return price;    }    @Override    public String getScope() {        return scope;    }    @Override    public String getAuthor() {        return author;    }}

(4)实现书店类

class BookStore {    private final static ArrayList
sBookList = new ArrayList
(); static { sBookList.add(new NovelBook("天龙八部", 3200, "金庸")); sBookList.add(new NovelBook("巴黎圣母院", 5600, "雨果")); sBookList.add(new NovelBook("悲催世界", 3500, "雨果")); sBookList.add(new NovelBook("金瓶梅", 4300, "兰陵笑笑生")); sBookList.add(new ComputerBook("Think in Java", 5800, "Bruce Eckel", "编程语言")); } public static void main(String[] args) throws IOException { NumberFormat format = NumberFormat.getCurrencyInstance(); format.setMaximumFractionDigits(2); Log.d("JimmyZhang", "----书店卖出去的书籍记录如下---"); for (IBook book : sBookList) { Log.d("JimmyZhang", "书籍名称:" + book.getName() + "\t书籍作者:" + book.getAuthor() + "\t书籍价格:" + format.format(book.getPrice() / 100.00) + "元"); } }}

3、原则

(1)通过接口或抽象类约束扩展,对扩展进行边界限定;

(2)参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;

(3)抽象层尽量保持稳定,一旦确定就不允许修改;

(4)将相同的变化封装在一个接口或抽象类中;

(5) 将不同的变化封装到不同的接口或抽象类中。

4、总结

(1)单一职责原则要求实现类要职责单一;

(2)里氏替换原则要求不要去破坏继承系统;

(3)依赖倒置原则要求面向接口编程;

(4) 接口隔离原则要求在设计接口的时候要精简单一;

(5) 迪米特法则要求要降低耦合;

(6)开闭原则是总纲,要求对扩展开发,对修改关闭。

转载地址:http://twlii.baihongyu.com/

你可能感兴趣的文章
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
乔布斯18岁求职信拍卖价22.24万美元,值吗?
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
假如计算机是中国人发明的,那代码应该这么写
查看>>
科技公司最爱的 50 款开源工具,你都用过吗?
查看>>
触目惊心:比特币到底消耗了多少能源?
查看>>
面试官:简历上敢写技术精通?那我就不客气了!
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
程序员之神
查看>>
4 岁小女孩给 Linux 内核贡献提交
查看>>