不要纠结于这个问题,关于“创建对象的过程违背开闭原则与依赖倒置原则”这句话,如果不在约定“创建对象的过程到底是什么样的前提下”,我个人认为没有讨论的必要。 “创建对象的过程”,正如其说的,是一个过程,这个过程可能会影响父类,可能会影响基类,可能什么操作都没有(这是针对于对象的构造方法而言)。如果对这么笼统的概念下结论,就有点太以偏概全了,比如下面的代码: public class App {
public static class Hi{ public Hi(){ System.out.println("hello world"); } }
public static void main(String[] args) { Hi hi = new Hi(); } } 好,我创建了一个Hi()对象,这个对象的创建违背了依赖倒置与开闭原则么?如果连那么简单的代码都能违背的“原则”,那算了,还不如不去遵守 抛开对象的构造函数,如果谈JVM创建对象的话,确实,会违背这些原则,但是它使用的是面向过程的设计思想,如果非要拿OO设计模式去规范,那就,呵呵。 ========== 设计模式只是一个工具,没必要去刻意记忆。等代码写到一定程度,自然而然就会用到,你没听过设计模式,也一样。
“创建对象的过程”,正如其说的,是一个过程,这个过程可能会影响父类,可能会影响基类,可能什么操作都没有(这是针对于对象的构造方法而言)。如果对这么笼统的概念下结论,就有点太以偏概全了,比如下面的代码:
public class App {
public static class Hi{
public Hi(){
System.out.println("hello world");
}
}
public static void main(String[] args) {
Hi hi = new Hi();
}
}
好,我创建了一个Hi()对象,这个对象的创建违背了依赖倒置与开闭原则么?如果连那么简单的代码都能违背的“原则”,那算了,还不如不去遵守
抛开对象的构造函数,如果谈JVM创建对象的话,确实,会违背这些原则,但是它使用的是面向过程的设计思想,如果非要拿OO设计模式去规范,那就,呵呵。
==========
设计模式只是一个工具,没必要去刻意记忆。等代码写到一定程度,自然而然就会用到,你没听过设计模式,也一样。
其次,你在2楼的意思,我明白,因为我自身也是这么想的。
只是我在看到这句话的时候,想搞明白这句话的意思,我并非死读书,只是追根究底罢了。
违背开闭我明白,可为什么会违背依赖倒置呢?
难道是因为lst依赖于具体类型ArrayList?
我只是想搞明白这个,谢谢,希望你能再次解释下。
首先依赖倒置原则的目的是在使用一个类实例时,使用的是抽象类的实例以及抽象类的方法来做操作,这样就不依赖子类的具体实现。那么也就是说我们所期望使用的都是抽象方法,而不是实际操作方法。
但当我们new一个类的时候,虽然使用了抽象类去代表其实际的子类,但在使用的时候调用的却是这个实际子类中实现的真是方法,而不是抽象方法,也就是有了实际的类型。这就与依赖倒置原则产生了冲突,也就违反了依赖倒置原则。
一句话就是依赖倒置就是期望所有都是抽象的,无论类或者是其方法,都要使用抽象来实现。而new的时候出现了实际的实例,不是抽象,因此违反。