在看设计模式突然一实验室大牛问我变成原则看过吗?我一下子蒙了。确实没有看过,遂上网搜集资料总结了一下:
1避免创建不必要的对象
String s=new String("stringette"); //don't do this
改语句每次执行的时候都会创建一个String的实例,若改语句被频繁的调用,就会出现成千上万的不必要的String实例.改进后的版本:
String s="stringette";
2接口优与抽象类.复合优先继承..
3不要在新的代码中使用原生态类型.最后使用包装类.,优先考虑泛型.
4优先考虑安全类的容器类.
5用enum代替int常量
6坚持使用override注解.
7不用用String拼接字符串,多用StringBuffer
8在有异常的情况下使用异常,优先使用标准的异常,避免过多的在一个方法里嵌套多个异常.并努力是失败保持原子性,更不要忽略了异常,在
9 for -each 循环优先传统的for循环,
10不要写过长的方法,最后有清楚的注释,遵守普遍接受的命名规则
11注意线程安全的问题,主要是变量共享和线程同步这两个方面
12尽量不要使用线程组.应为它不安全
13注意对象的序列化.
基本原则:
(1)开闭原则:
一个软件实体应对扩展开放,对修改封闭。其中抽象化是关键。
“开-闭”原则如果从另外一个角度讲:就是所谓的“对可变形的封装可见”,即:找到一个系统的可变因素将之封装。
“对可变性的封装”意味着两点:
1.一种可变性不应当散落在代码的很多地方,而应当被封装到一个对象里面。同一个可变性的不同表象意味着同一个集成登记结构中的具体子类。继承应当被看作是封装变化的方法,而不应当被看作是从一般对象生成特殊的对象的方法。
2.一个可变性不应当与另一个可变性混合在一起。
(2)里氏代换原则:
一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且他根本不能觉擦到积累对象和子类对象的区别。
里氏代换原则世纪城服用的基石。只是当子类可以替换掉基类,软件单位的功能不会受到影响时,基类才能被真正的复用。而子类才能够在积累的基础上增加新的方法。
(3)依赖倒转原则:
实现“开-闭”原则的挂念是抽象化,并且从抽象化到处具体化实现,如果说“开-闭”原则是面向对象设计的目标的话,依赖倒转原则就是这个面向对象设计的主要机制。
依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体。
依赖倒转原则是COM,CORBA,JavaBean 以及EJB等构建设计模型背后的基本原则。
在面向对象的系统中,两个类之间可以发生三种不同的依赖(耦合)关系:
1.零耦合:如果两个类之间没有耦合关系,
2.具体耦合:具体耦合发生在两个具体(可实例化的)类之间,经由一个类对另一个累的直接引用造成。
3.抽象耦合:发生在一个具体类和一个抽象类(或接口)之间,是两个必须发生关系的类之间存在最大的灵活性。
依赖倒转原则要求客户端依赖于抽象耦合。依赖倒转原则的表述是:抽象不应该依赖细节,细节应该依赖抽象。另一种表述是:要针对接口编程,不要针对实现编程。针对接口编程的意思是:应当使用java接口和抽象java类进行变量的类型声明、参数的类型声明、方法的返回类型声明,以及数据类型的转换等。要保证做到这一点,一个具体java类应当事先java接口和抽象java类中声明过的方法,而不应当给出多余的方法。
变量被声明时的类型叫做变量的静态类型,变量所引用的对象的真实类型叫做变量的实际类型,在很多情况下,一个java程序所需引用一个对象,这个时候如果这个对象有一个抽象类行的话,应当使用这个抽象类型作为变量的静态类型,这就是针对接口编程的含义。
(4)接口隔离原则
接口隔离原则是说:使用多个专门的接口比使用单一的总接口要好。换言之,从一个客户累的角度讲,一个类对另外一个类的依赖性应当是简历在最小的接口上。
一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演相当于接口的实现。因此一个借口应当简单的代表一个角色,如果系统涉及到多个角色的话,那么每一个角色应当由一个特定的接口代表。
(5)合成聚合复用原则
合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些镀锡iangde委派达到复用已有功能的目的,这个设计原则有另一个更简短的表述:尽量使用合成/聚合,尽量不使用继承。
合成/聚合的好处:
1.新对象存取成分对象的唯一方法是通过成分对象的接口。
2.这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
3.这种复用支持包装。
4.每一个新的类可以将焦点集中在一个任务上。
5.这种复用可以在运行时间内动态运行,新对象可以动态地引用与成分对象类型相同的对象。
继承复用的好处:
1.新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类。
2.修改或扩展继承而来的实现较为容易。
继承复用的缺点:
1.继承复用破坏包装,因为继承将超类的实现细节暴露给子类。由于超累的内部细节常常是对子类透明的,因此这种复用是透明的复用,又称为白盒复用。
2.如果超类的实现发生改变,那么子类的实现也不得不发生改变,因此当一个基类发生改变时,这种改变会印象到它一级一级的子类,使设计师不得不相应地改变这些子类,以适应超类的变化。
3.从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性。
导致错误的使用继承而不是合成/聚合的一个常见的原因是错误的把“Has-A”当作“is-a”后者代表一个类是另一个类的一种,前者代表一个类是另一个类的一个角色,而不是另一个类的特殊种类。
(6)迪米特法则
即最少知识原则,就是说一个对象应当对其他的对象有尽可能少的了解