抽象类更注重,类和类之间的关系,和存在的约束。
接口更注重对类的行为约束,统一规则。
设计模式的定义:
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
工厂模式总结:
大概流程:使用一个接口,不同实体类,实现相同的一个借口。在工厂类的某个get()方法中根据输入条件,选择创建某一个实体类。
我的问题:为什么是用接口去约束实体类,而不是使用抽象类?
我的答案:因为在工厂模式中,并不需要让实体类继承某个特定成员属性。而这里仅仅需要让实体类遵循某种规范(如重写相同的方法),并且实现同一个接口后,这些实体类都会具有一个继承后产生的特性即为传递性(子类继承父类后,父类可以作为子类的引用),这样在工厂类里,的某个工厂方法中实例这些实体类时候,返回参数即可都为接口名。
抽象工厂模式总结:
大概流程:在原有的工厂类上加了一个抽象工厂类。然后根据工厂生产器这个类对返回某个工厂类的工厂实例。在main()房中,通过工厂生产器获得相应工厂的工厂实例对象,在通过工厂实例对象进一步去获取不同工厂的不同实例对象
我的问题:为什么抽象工厂模式中的抽象工厂类不是接口?
我的问题:这里虽然按照逻辑来说可以是抽象类也可以是接口去约束工厂生产器的行为。但是为什么采用抽象类而不采用接口呢?
我的答案:首先这里,工厂生产器只需要继承一个父类,而不需要继承多个父类,所以工厂类为抽象类的第一原因。再次对于理解上来说,抽象工厂模式可以说是工厂的工厂,这里抽象工厂类,更能表现出这个整体为一个对象。而接口从代码实现上看和抽象类并无区别,但是接口更能体现的是对某些实体类的约束(如:人们上班,需要打卡,每个人都需要重写这个打卡方法)
观察者模式总结:
大概流程:被观察者(目标对象)目标类中的成员变量中有个List数组用于存放观察者,而观察者,都继承了一个Observer抽象类,这个抽象类中含有一个被观察者的成员变量(目标对象)。通过继承Observer抽象类的子类的实例对象,在构造函数中传入一个被观察者(目标对象)目标对象实例,将类中的被观察者变量指向该对象实例。从而进行绑定被观察者对象(目标对象)。然后根据被观察者对象进行对观察对象进行添加到List数组中。当被观察者调用某个方法时候,则会通知所有的观察者对象。
我的问题:为什么使用的是Observer抽象类,而不是Observer接口?
我的答案:因为在Observer抽象类中,我们可以为这个抽象类添加一些成员变量。而接口则没有类的性质,不存在成员变量。所以在观察者模式里,我们每个具体的观察者继承了Observer抽象类时候对需要一个被观察者的成员变量。在这些观察者的需要进行实例话的时候,则可以在构造函数里对这个成员变量进行指向某个被观察者的实例对象。而这里Observer使用抽象类的好处就是继承这个类的观察者类不需要再添加被观察者这个成员变量,更能体现出Observer抽象类与观察者类的关系,而这里使用接口则只能表示出一种约束关系。
总的来说:设计模式充分发挥了面向对象编程语言的多态特性。在JAVA语言中,更充分的发挥了抽象类,和接口的不同作用。
更能体会到了抽象类和接口的特性。
抽象类:具有类的特性,但是无法进行实例化,提供了抽象方法,约束了子类的某些行为(如某个函数必须重写)。
接口:接口更像是一种行为的规范,虽然某种情况和抽象类的作用一样。但是,抽象类更注重,类和类之间的关系,和存在的约束。而接口更注重对类的行为约束,统一规则。