设计模式原则是设计设计模式的原则,也就是设计模式应当如何设计所遵守的原则;换句话说,设计模式的设计是基于设计模式原则的。
设计原则的目的是构建出更加稳定和健壮的软件。而像这样的软件要求
一个类只负责一项功能。
通过降低类的复杂度从而提高类的可读性,可扩展性
通常情况下遵守单一职责原则是在类的粒度上的,但是当代码逻辑足够简单的情况下,可在方法上保持单一职责原则。
接口的作用之一是规范类,实现类的松耦合,进而实现软件的松耦合。
换句话说,接口隔离也是一种单一职责原则的实现。
接口隔离原则的要求就是明确接口功能,尽可能细分接口。
接口的细化直接导致整个系统灵活性,但同时会带来结构的复杂性。
比如说预先定义了10个接口,为了满足接口隔离而将接口分成20个。那么类在实现接口上会变得更加灵活,但接口的增多会导致结构的复杂性。
依赖于抽象,不要依赖于具体。
解耦,增强模块复用性。
依赖倒置原则的思想与Spring IOC容器机制相呼应,类对于接口的依赖降低了类之间的耦合性,而IOC中类对于容器的依赖同样解决了类之间高耦合的问题。
//接口传递interface Car{ void drive();}interface Person{ void lunch(Car car);}//构造方法传递interface Bicycle{ void ride();}class Tom{ private Bicycle bicycle; Tom(Bicycle bicycle) { this.bicycle=bicycle; }}//setter方法传递interface Weather{ void sun();}class Today{ private Weather weather; public void setWeather(Weather weather) { this.weather = weather; }}
//接口传递
interface Car
{
void drive();
}
interface Person
void lunch(Car car);
//构造方法传递
interface Bicycle
void ride();
class Tom
private Bicycle bicycle;
Tom(Bicycle bicycle)
this.bicycle=bicycle;
//setter方法传递
interface Weather
void sun();
class Today
private Weather weather;
public void setWeather(Weather weather) {
this.weather = weather;
利:实现了代码重用,更加方便的实现了功能扩展。 弊:增强了类之间的耦合性
在子类中尽量不要重写父类的方法。
如果不得不重写,可提取出基类共同继承。另外也可通过聚合,依赖,组合的方式替代继承。
class A{ public void a1(){ } public void a2(){ } }class B extends A{ @Override public void a1() { } }//提取基类后class Base{ public void a2 { }}class A extends Base{ public void a1(){ }}class B extends Base{ public void a1(){ }}
class A
public void a1(){
public void a2(){
class B extends A
@Override
public void a1()
//提取基类后
class Base
public void a2
class A extends Base
class B extends Base
对扩展开放,对修改关闭。
通俗的说,在软件功能需要扩展时,尽量增加代码,而不是修改原有代码。
abstract class Action{ abstract public void action();}class Describe{ public void describe(Action action) { action.action(); }}class A extends Action{ public void action() { System.out.println("跑步"); }}class B extends Action{ public void action() { System.out.println("瑜伽"); }}class C extends Action{ public void action() { System.out.println("健身"); }}class X extends Action{ public void action() { System.out.println("xxx"); }}public class Main{ public static void main(String[] args) { Describe describe = new Describe(); describe.describe(new A()); describe.describe(new B()); describe.describe(new C()); describe.describe(new X()); }}
abstract class Action
abstract public void action();
class Describe
public void describe(Action action)
action.action();
class A extends Action
public void action()
System.out.println("跑步");
class B extends Action
System.out.println("瑜伽");
class C extends Action
System.out.println("健身");
class X extends Action
System.out.println("xxx");
public class Main
public static void main(String[] args)
Describe describe = new Describe();
describe.describe(new A());
describe.describe(new B());
describe.describe(new C());
describe.describe(new X());
定义一个抽象类,其中有action方法,ABC类都有各自的行为,继承抽象类后重写方法。这些需要扩展新功能时只需新加一个像X一样的类就可以了。基本上不需要修改任何位置,只是扩展了功能。
一个对象应该对其他对象保持最少的了解。
只与直接的朋友通信。
直接的朋友:除了出现在局部变量的类之外,都是直接朋友。
换句话说:迪米特法则要求局部变量中最好不要出现陌生的类。
降低类之间的耦合。(耦合只能尽量降低,无法消除)
尽量使用合成/聚合代替继承。
合成/聚合:某种类与类之间建立联系的方式。其耦合度低于继承。
参考资料: 设计模式之六大原则——接口隔离原则(ISP) 依赖倒置原则 面向对象原则之一 依赖倒置原则 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解 里氏替换原则
原文链接:http://www.cnblogs.com/noneplus/p/11333038.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728