写在前面:本人最近在看《大话设计模式》这本书,书里是用C#讲解的实例。现在写心得笔记与大家分享,就试着写一个JAVA版的。例子还是书里的例子。不过是Java语言实现的。后面也会给出本人的一些理解建议。谢谢《大话设计模式》的作者。
一、什么是单一职责原则?
今天要说的是单一职责原则,这个应该比较好理解。所谓单一职责,就一个类而言,应该仅有一个引起它变化的原因。也就是说它只做简单的一件事,只是做好自己的本质工作其他尽量不去参与。
在我们设计类的时候,我们往往还没有好好思考就开始编码了,这是个不好的习惯。磨刀不误砍柴工,我们应该把业务逻辑理清,把交互的代码和逻辑代码分离开,然后再把逻辑代码根据分工分离开,前提是他需要一个类,也就是有一个能引起这一部分代码变化的原因,那这部分代码就可以单独成类。由于大部分ITer(IT人士)开始接触编程时用的是C语言这种过程化的程序设计,又由于,我们人类习惯按步骤按方法去做事,所以编程时首先想到的就是方法,而不是类。在面向对象的语言中类是程序的最小单位。所以我们要锻炼自己的抽象思想,万物皆类,无论抽象的事物还是具体的事物都可以是一个类。
设计模式,其实不是什么很高深的东西,只是我们没有去总结而已。有过多年开发经验的老鸟们去看设计模式,他会笑而不语,因为这些他们几乎都用过,只是没有给出一个名字而已。设计模式,其实真的是很高深的东西,因为从哲学的角度(不要骂我,我只是宣扬一下马克思的课有点用)来看,它不仅适用于编程,还适用于生活。就像我们ITer,谁都知道,如果我们立志在IT行业奋下去,一定要找一个方向,要做好我们的本质,不能今年做程序员,明年做销售吧。不然你什么都做不好。还有就是朝着一个方向走,就像android,ios,wp,javaweb,.net等等,太多了你要是什么都去搞,十年你也是什么都会什么都不精。如果你只搞android,一天一个知识点,一天一个小项目,7天一个大点的项目。一年之后,你绝对是大牛。
二、代码实例
闲话少说,上实例(手机拍照)。
一般的设计:
Phone.java
public class Phone {
private float width;
private float height;
private float thick;
public void takePhoto() {
System.out.println("Take a photo");
}
public void makeCall() {
System.out.println("Make a call");
}
public void sendMessage() {
System.out.println("Send a message");
}
public void playMusic() {
System.out.println("Play a music");
}
}
其实可以这样做:
Camera.java
public interface Camera {
public void takePhoto();
}
Mp3.java
public interface Mp3 {
public void playMusic();
}
Phone.java
public class Phone implements Camera,Mp3 {
private float width;
private float height;
private float thick;
public void makeCall() {
System.out.println("Make a call");
}
public void sendMessage() {
System.out.println("Send a message");
}
public void playMusic() {
// TODO Auto-generated method stub
System.out.println("Play a music");
}
public void takePhoto() {
// TODO Auto-generated method stub
System.out.println("Take a photo");
}
}
三、小结
虽说单一职责原则很使代码很清晰,可以解决一个类过于庞大的问题,但是真的不能乱用。用的过分了,可能会使你的程序分崩离析,这样就得不偿失了。一句话,面向对象面向对象,找个对象面向面向就会了。别雪没对象,咱可以去new啊,要多少有多少。