Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 依赖于抽象。不要依赖于具体的类别_Java_Oop_Design Patterns - Fatal编程技术网

Java 依赖于抽象。不要依赖于具体的类别

Java 依赖于抽象。不要依赖于具体的类别,java,oop,design-patterns,Java,Oop,Design Patterns,当我在读《工厂》的时候,我把工厂的设计模式抽象为头先设计模式 书。它提到了这个短语 你能给出一个基本的例子和解释来澄清它吗。因为工厂是虚拟的建设者。它们使您能够在运行时返回不同的类型。工厂依赖于多态性 如果返回具体类型,则不能执行任何此类操作 public interface IFoo { void execute(); } public class Bar implements IFoo { public void execute() { System.out.println

当我在读《工厂》的时候,我把工厂的设计模式抽象为头先设计模式 书。它提到了这个短语


你能给出一个基本的例子和解释来澄清它吗。

因为工厂是虚拟的建设者。它们使您能够在运行时返回不同的类型。工厂依赖于多态性

如果返回具体类型,则不能执行任何此类操作

public interface IFoo {
    void execute();
}

public class Bar implements IFoo {
    public void execute() { System.out.println("Bar does one thing"); }
}

public class Baz implements IFoo {
    public void execute() { System.out.println("Baz does another"); }
}

public class FooFactory { 
    private static final FooFactory instance = new FooFactory(); 

    private FooFactory() {}

    public static final FooFactory getInstance() { return instance; }

    public IFoo create(Class clazz) { 
        return clazz.newInstance();
    }
}

显然,如果从create方法返回
,则
Baz
是不可能的,反之亦然。接口是关键。

依赖于抽象可能有助于实现类之间的松散耦合。这就是为什么建议这样做。想一想一个例子
Animal
class。如果您可以在定义时保留许多抽象,那么当您定义更具体的类时,例如
Dog
Bird
,您将有更大的灵活性。如果您将
的一个具体特性放在
动物
中,那么当您尝试编写
扩展
动物
时,您将遇到冲突。因此,总是将事物抽象到类层次结构的上层。

依赖倒置原则;五个人中的一个。查看此问题的答案;-那里有一些非常好的信息

在传统的应用程序体系结构中,较低级别的组件被设计为供较高级别的组件使用,从而能够构建越来越复杂的系统。在这种组合中,高级组件直接依赖于低级组件来完成某些任务。这种对低级组件的依赖限制了高级组件的重用机会

用“简单”的术语来说,这意味着当你依赖一个对象的具体实例时——你正在为你的代码建立一个依赖关系(尽管没有这个意图),这就限制了重用它的能力

记住,具体类型是可以实例化的类类型,抽象类型是不能实例化的类型;i、 创建一个接口。(见附件)

如果您编码到一个特定的具体类,那么您将始终拥有该类的需求。但是,如果您将代码编写到一个接口(抽象),那么就可以调整代码以处理任意数量的类;只要他们实现了公共接口

因此,在Java中,这意味着在可能的情况下,您应该对接口进行编码,并避免使代码依赖于特定的项。这通常与传递
接口
类型作为参数和返回类型一样简单;而不是具体的类

依赖关系越少=重用代码的能力越强。 更多依赖项=能够重用代码的需求更多

当你学习设计模式时,这将是一个反复出现的主题

在维基百科上。

这与“编程到接口,而不是实现”的概念相同。我说的对吗@Fergus