概述
目录
面向对象基础
单一职责原则
开放-封闭原则
依赖反转原则
最近对设计模式产生一些兴趣,读了读《大话设计模式》,结合自己的理解,梳理出此系列文章。
本文着重讨论面向对象基础、单一职责原则、开放封闭原则和依赖反转原则。
面向对象基础
1. 类与对象:
对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。
2.构造方法:
对类进行初始化,与类同名,无返回值,也许不要void,在new时创建。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们。
3.方法重载:
方法重载就是方法名称重复,加载参数不同。既可以发生在普通方法上,也可以发生在构造方法上。
4.属性和修饰符:
public 对所有类可见;private 在同一类内可见;protected 对同一包内的类和所有子类可见;default 在同一包内可见,不使用任何修饰符。参考此文章。
5.封装:
把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
6.继承:
继承就是子类继承父类的特征和行为(is-a关系,B是A,B可以继承A,猫是哺乳动物,猫继承哺乳动物)。
最好记住三句话:1.子类拥有父类非private的属性和功能;2.子类具有自己的属性和功能,子类可以扩展父类没有的属性和功能;3.子类可以使用自己的方式实现父类的功能(方法重写)。
7.多态:
同一个行为具有多个不同表现形式或形态的能力。
最好记住三句话:1.子类以父类的身份出现;2.子类在工作时以自己的方式来实现;3.子类以父类的身份出现时,子类特有的属性和方法不可以使用。
8.抽象类:
使用abstract关键字声明,对类的抽象。实例化没有任何意义的父类,可以改造成抽象类(比如动物类,一个动物应该是什么样?)。
最好记住四句话:1.抽象类不能被实例化;2.抽象方法是必须被父类重写的方法;3.抽象类中不一定包含抽象方法(构造方法、类方法(static)不能被声明成抽象方法),但是有抽象方法的类必定是抽象类;4.抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
9.接口:
使用interface关键字声明,对行为的抽象。
最好记住三句话:1.接口不能用于实例化对象,接口没有构造方法。接口中的方法都是公有的;2.一个类只能继承一个类,但是能实现多个接口。3.接口的继承使用extends关键字,子接口继承父接口的方法。3.在Java中,类的多继承是不合法,但接口允许多继承。
10.抽象类和接口的区别:
1.类是对对象的抽象,接口是对行为的抽象;2.代码上:一个类只能继承一个抽象类,而一个类却可以实现多个接口;抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行等;3.设计角度,抽象类是从子类发现公共的东西,泛化出父类,子类继承父类(自底而上的抽象);接口是根本不知子类的存在,方法如何实现不确认(自顶向下的设计)。参考此文章。
11.泛型:
泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
java 中泛型标记符:E - Element (在集合中使用,因为集合中存放的是元素);T - Type(Java 类);K - Key(键);V - Value(值);N - Number(数值类型);? - 表示不确定的 java 类型。
单一职责原则
所谓单一职责,就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担职责过多,就等于把职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。 如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,需要考虑职责分离。 所谓职责:比如俄罗斯方块,至少两个类:一个游戏逻辑类,一个游戏界面类。
开放-封闭原则
所谓开闭原则,软件实体(类、模块、函数等),对于扩展是开放的,对于更改是关闭的。 设计者必须猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。 面对需求,对程序的修改是通过增加新代码进行的,而不是更改现有的代码,这是"开放-封闭"原则的核心。 尽可能早的创建正确的抽象,使之达到可扩展、可复用、灵活性好。
依赖反转原则
所谓依赖反转原则,1.高层模块不应该依赖低层模块,两个都应该依赖抽象;2.抽象不应该依赖细节,细节应该依赖抽象。
活字印刷具有:可维护、可扩展、可复用和灵活性好的特点,面向对象也应该具备:高内聚、低耦合的特点。 什么叫高层模块依赖低层模块?常用代码一般会写成程序库,大多数项目都会依赖数据库,每次做新项目时都会调用这些函数。
假设用户换数据库或者存储信息方式,我们希望复用高层模块,但高层模块与低层绑定,很难拆分。 解决方案是:使用接口或者抽象类,接口稳定,更改不受影响,高层模块和底层模块很容易被复用。 里式代换原则:子类型必须能够替换掉它们的父类型。即子类继承了父类,所以子类可以以父类的身份出现。推演出:编程世界,企鹅不能继承鸟(不能以鸟的身份出现),因为所有鸟都能飞,企鹅飞不了。 针对抽象编程而非细节编程,程序中的依赖关系终止于抽象类或者接口,这是面向对象的设计。
最后
以上就是干净人生为你收集整理的设计模式(一):面向对象基础、单一职责原则、开放封闭原则和依赖反转原则面向对象基础单一职责原则开放-封闭原则依赖反转原则的全部内容,希望文章能够帮你解决设计模式(一):面向对象基础、单一职责原则、开放封闭原则和依赖反转原则面向对象基础单一职责原则开放-封闭原则依赖反转原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复