相关疑难解决方法(0)

这是一个众所周知的设计模式吗?它叫什么名字?

我经常在代码中看到这个,但是当我说到它时,我不知道这种'模式'的名称

我有一个带有2个参数的方法,它调用一个有3个参数的重载方法,并故意将第3个参数设置为空字符串.

public void DoWork(string name, string phoneNumber)
{
    DoWork(name, phoneNumber, string.Empty)
}

private void DoWork(string name, string phoneNumber, string emailAddress)
{
    //do the work
}
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是不重复代码,并允许现有的调用者仍然调用只有2个参数的方法.

这是一种模式,它有一个名字吗?

c# java design-patterns overloading terminology

21
推荐指数
4
解决办法
2560
查看次数

我应该使用继承还是组合?

我想简短一点.我建有两间HouseA,说BedRoomStudyRoom,从所谓的基类派生两者Room. BedRoom并且StudyRoom有一个同一个父母叫House.此外,房屋内的任何房间只能通过父母进入任何其他房间.如果BedRoom必须访问任何属性StudyRoom,它必须只通过House(即父),反之亦然.

HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room
Run Code Online (Sandbox Code Playgroud)

现在的问题:让我们说,我建造另一个家(比方说HouseB),这与上面完全相同,但只有一个改变.我不想要两个单独的房间(即BedRoomStudyRoom),而是一个房间(MasterRoom),这两个房间都有这些设施.为了代码可重用性,我可以想到以下设计选项:

Option-1:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
Run Code Online (Sandbox Code Playgroud)

在这里,我失去了再利用的属性的能力BedRoomStudyRoom我的创造HouseA.请注意,大多数的属性BedRoom,并StudyRoom需要重新实现MasterRoom无论如何,从而导致代码重复.

Option-2:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
MasterRoom HAS LogicalBedroom
MasterRoom HAS …
Run Code Online (Sandbox Code Playgroud)

oop perl inheritance composition

15
推荐指数
1
解决办法
1498
查看次数

一个类应该实现一个只有常量的接口吗?

今天我看了ZipEntry上课,发现了以下内容:

public class ZipEntry implements ZipConstants, Cloneable
Run Code Online (Sandbox Code Playgroud)

ZipConstants没有定义任何方法 - 只有常量(static final int LOCHDR = 30)

然后我发现使用常量实现接口允许您直接访问这些常量,就好像它们是在类本身中定义的一样.例如:

public interface Constants {
    static final int CONST = 2;
}

public class implements Constants {
    int doSomething(int input) {
        return CONST * input;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有其他原因不使用此,除了:

  • 在常数来自哪里时,它起初是混乱的
  • 将接口用于常量定义被认为是错误的

我很好奇,因为这绝对不是一种常见的做法.

java

6
推荐指数
1
解决办法
2954
查看次数

java继承与组合(实现堆栈)

我试图在java中实现一个堆栈(使用列表接口:接口列表).

我想以两种不同的方式实现它:使用组合和继承.

对于继承,到目前为止我有:

 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;

 public class StackInheritance implements List {
      //implement list methods
 }
Run Code Online (Sandbox Code Playgroud)

对于作文,我有:

 import java.util.List;

 public abstract class StackComposition implements List {
     // implement some standard methods
 }

 public class StackViaList extends StackComposition {
     // implement methods that have not been implemented in the abstract
     // class
 }
Run Code Online (Sandbox Code Playgroud)

我很困惑从哪里开始.我之前从未使用过接口,所以我是否应该使用List方法来"模仿"堆栈,例如使用Array或ArrayList?

另外,对于合成,我不明白应该在StackComposition中使用哪些方法以及应该在StackViaList中使用什么方法.在不完全理解接口以及继承和组合之间,我有点迷失.我似乎还不能"得到它"......

任何帮助将不胜感激,谢谢!

java inheritance stack list composition

3
推荐指数
1
解决办法
4755
查看次数

装饰模式使用组合而不是继承

我之前对装饰器模式的理解是你继承WindowWindowDecorator,然后在重写的方法中,在调用Window所述方法的实现之前做了一些额外的工作.类似于以下内容:

public class Window
{
    public virtual void Open()
    {
        // Open the window
    }
}

public class LockableWindow : Window // Decorator
{
    public virtual void Open()
    {
        // Unlock the window
        base.Open();
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这基本上是对装饰进行硬编码,那么如何使用合成而不是继承来重构呢?

c# design-patterns decorator composition

0
推荐指数
1
解决办法
4078
查看次数