相关疑难解决方法(0)

1705
推荐指数
22
解决办法
123万
查看次数

与Java 8中的默认方法和抽象类的接口

由于Java 8允许在名为Default Methods的接口中默认实现方法,因此在何时使用a之间似乎存在混淆abstract class.

那么什么时候应该使用与默认方法的接口,何时应该使用抽象类?抽象类在这种情况下仍然有用吗?

java abstract-class interface java-8 default-method

489
推荐指数
10
解决办法
10万
查看次数

476
推荐指数
13
解决办法
22万
查看次数

我该如何解释Interface和Abstract类之间的区别?

在我的一次访谈中,我被要求解释InterfaceAbstract类之间的区别.

这是我的回答:

Java接口的方法是隐式抽象的,不能有实现.Java抽象类可以具有实现默认行为的实例方法.

在Java接口中声明的变量默认为final.抽象类可能包含非最终变量.

默认情况下,Java接口的成员是公共的.Java抽象类可以具有类似私有,受保护等类通常的类成员.

应使用关键字"implements"实现Java接口; 应使用关键字"extends"扩展Java抽象类.

接口只能扩展另一个Java接口,抽象类可以扩展另一个Java类并实现多个Java接口.

Java类可以实现多个接口,但它只能扩展一个抽象类.

然而,面试官并不满意,并告诉我这个描述代表了" 书本知识 ".

他告诉我一个更实际的回答,解释我何时会使用实际例子在界面上选择一个抽象类.

我哪里做错了?

java oop inheritance abstract-class interface

456
推荐指数
13
解决办法
42万
查看次数

何时使用接口而不是抽象类,反之亦然?

这可能是一个通用的OOP问题.我想根据它们的用法在接口和抽象类之间进行一般性比较.

什么时候想要使用接口?何时想要使用抽象类

oop inheritance abstract-class interface

412
推荐指数
13
解决办法
31万
查看次数

设计模式:工厂与工厂方法与抽象工厂

我正在从网站上阅读设计模式

在那里我读到了有关工厂,工厂方法和抽象工厂的信息,但它们很混乱,我对定义并不清楚.根据定义

Factory - 创建对象而不将实例化逻辑暴露给客户端,并通过公共接口引用新创建的对象.是Factory Method的简化版本

工厂方法 - 定义用于创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象.

抽象工厂 - 提供用于创建相关对象族的界面,而无需明确指定其类.

我还查看了关于抽象工厂与工厂方法的其他stackoverflow线程,但是那里绘制的UML图使我的理解更加糟糕.

有谁能告诉我

  1. 这三种模式如何相互不同?
  2. 什么时候用哪个?
  3. 如果可能的话,任何与这些模式相关的java示例?

java language-agnostic design-patterns factory factory-method

164
推荐指数
6
解决办法
8万
查看次数

"程序到界面".这是什么意思?

可能重复:
"编程到接口"是什么意思?

我一直看到这个词:

编程到界面.

究竟是什么意思?真实的设计场景将受到高度赞赏.

java oop

35
推荐指数
5
解决办法
2万
查看次数

何时使用抽象工厂模式?

我试图简洁地描述何时使用工厂,我自己和我的团队.我遇到了以下相关问题,这有点帮助:

基于这些链接以及一系列其他来源(在下面列出),我提出了以下内容:

何时使用抽象工厂模式:

  • 当您使用接口var或'new'运算符时
    • 例如,User user = new ConcreteUserImpl();
  • 并且您正在编写的代码在某些时候应该是可测试/可扩展的

说明:

  • 接口本质上意味着多个实现(适用于单元测试)
  • 接口变量意味着符合OCP和LSP的代码(支持子分类)
  • 使用'new'运算符会破坏OCP/DI,因为高度耦合的类很难测试或更改

"我是否为每种对象类型创建了一个工厂?这看起来过分了."

  • 不,你可以有一个(或几个)工厂生产很多(通常是相关的)对象类型
  • 例如appFactory.createUser(); appFactory.createCatalog(); 等等

何时不使用工厂:

  • 新对象非常简单,不太可能被细分
    • 例如List list = new ArrayList();
  • 新对象测试不是很有趣
    • 没有依赖关系
    • 不执行任何相关或长期工作
    • 例如Logger log = new SimpleLogger();

参考文献:


我的问题是:我的摘要是否准确,是否有意义?有什么我忽略的吗?

提前致谢.

language-agnostic oop design-patterns factory factory-pattern

18
推荐指数
2
解决办法
1万
查看次数

使用嵌套依赖项和Factory类执行单元测试

我是单元测试和PHPUnit的新手,但我最近读了很多关于设计模式和隔离测试的内容,我决定重构一个我正在努力摆脱静态类,单例,硬编码依赖项的应用程序.在全球范围内定义的任何其他内容,希望使其"可测试",而不是在未来保持屁股的痛苦,因为它本来是一个长期项目.

到目前为止,我相信我理解单元测试背后的理论,但我想知道,在一个委托处理对象的嵌套依赖关系到一个工厂的场景中,应该如何进行单元测试所述工厂,或者它是多余的来测试它?什么是测试依赖关系"链"同步工作的最佳方法?

让我来说明问题.假设您有以下"遗留"代码:

class House {
    protected $material;
    protected $door;
    protected $knob;

    public function __construct() {
        $this->door = new Door();
        $this->knob = $this->door->getKnob();
        $this->material = "stone";

        echo "House material: ".$this->material . PHP_EOL . "<br/>";
        echo "Door material: ".$this->door->getMaterial() . PHP_EOL . "<br/>";
        echo "Knob material: ".$this->knob->getMaterial() . PHP_EOL . "<br/>";
    }
}

class Door {
    protected $material;
    protected $knob;

    public function __construct() {
        $this->knob = new Knob();
        $this->material = "wood";
    }

    public function getKnob() {
        return $this->knob;
    }

    public function …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing design-patterns

16
推荐指数
1
解决办法
2222
查看次数

为什么要使用工厂方法来创建对象

可能重复:
工厂模式.何时使用工厂方法?
为什么存在静态Create方法?

虽然我知道什么是工厂设计模式.但我无法理解使用它有什么好处.我们为什么要使用Factory Design Pattern创建对象.

.net c# uml design-patterns factory-pattern

11
推荐指数
1
解决办法
8640
查看次数

Java问题中的工厂方法模式示例

我正在尝试用Java创建一个非常简单的Factory Method设计模式示例.我真的不懂Java,我不熟悉编程,但我需要提出一个在java中实现的基本FactoryMethod示例.以下是我提出的建议.我确定有很多错误,我显然缺少一些构造函数,而且我对抽象类和接口感到困惑.你能指出我的错误并纠正我的代码以及解释吗?提前感谢您的时间和帮助.

public abstract class Person 
{   
    public void createPerson(){ }
}

public class Male extends Person 
{   
    @Override
    public void createPerson() 
    {
        System.out.print("a man has been created");
    }
}

public class Female extends Person 
{   
    @Override
    public void createPerson() 
    {
        System.out.print("a woman has been created");
    }
}

public class PersonFactory
{
     public static Person makePerson(String x) // I have no Person constructor in
     {                                         // the actual abstract person class so 
         if(x=="male")                         // is this valid here?
         { 
             Male …
Run Code Online (Sandbox Code Playgroud)

java design-patterns factory

5
推荐指数
1
解决办法
1万
查看次数

通过新运算符或某个接口进行对象分配

我正在浏览Java代码,我看到已经使用某个接口分配了对象,并且此接口包含一些使用newoperator 分配对象的方法.我无法想到他们为什么使用接口而不是直接使用new运算符分配对象.例如:

Animal animal = new Animal();
Run Code Online (Sandbox Code Playgroud)

要么

Animal animal = interface.allocateAnimal()
Run Code Online (Sandbox Code Playgroud)

interface是一个界面,它有一个allocateAnimal什么都不做 的方法new Animal().

所以最终我们做的是同样的事情,但是以不同的方式,所以在这里获得了什么?

编辑1:实际上接口是在其他地方实现的.所以接口不包含任何实现代码,它只包含方法.

java

4
推荐指数
1
解决办法
301
查看次数