Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Oop 需要一个包含单位的类型的简单示例_Oop_Design Patterns - Fatal编程技术网

Oop 需要一个包含单位的类型的简单示例

Oop 需要一个包含单位的类型的简单示例,oop,design-patterns,Oop,Design Patterns,我有一个处理角度的代码库,但有时输入的角度格式不同。也就是说,有些格式是顺时针角度,有些是逆时针角度,有些是0到360度,有些是-180到180度,有些是弧度 到目前为止,我已经成功地在内部保持了它们的一致性,但这始终是一个令人担忧的问题,而且出现的bug可能很难追踪 我想创建一个angle类,它可以跟踪单位、方向以及大小,这样我就可以以统一的方式处理它们,而不用担心太多问题 我在谷歌上搜索到了马丁·福勒(Martin Fowler),但如果没有一个简单的例子可供参考,我很难理解他的语言。我还发

我有一个处理角度的代码库,但有时输入的角度格式不同。也就是说,有些格式是顺时针角度,有些是逆时针角度,有些是0到360度,有些是-180到180度,有些是弧度

到目前为止,我已经成功地在内部保持了它们的一致性,但这始终是一个令人担忧的问题,而且出现的bug可能很难追踪

我想创建一个angle类,它可以跟踪单位、方向以及大小,这样我就可以以统一的方式处理它们,而不用担心太多问题

我在谷歌上搜索到了马丁·福勒(Martin Fowler),但如果没有一个简单的例子可供参考,我很难理解他的语言。我还发现了一个似乎相关的例子,但它看起来也不像一个简单的例子


有人能给我举一个包含单位的类的简单例子吗?

是一个很好的例子,因为它接受各种单位(秒、毫秒等)的数字。不确定如何翻译成另一种语言,但有可能。这是一个很好的例子,因为它接受不同单位(秒、毫秒等)的数字。不确定如何翻译成另一种语言,但这是有机会的。

你需要这样的东西:

class Measurement
{
    double amount;
    Unit   unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
金额将是“数字”,单位将告诉您如何解释该数字。。。您可能还需要在数字中实现一些逻辑,或者实现“表转换”,以便能够在不同的单元之间进行转换

顺便说一句: 这是一个在Smalltalk中实现的很棒的库:。它也有一个。
这是C++中另一个非常好的例子:。

您需要这样的东西:

class Measurement
{
    double amount;
    Unit   unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
金额将是“数字”,单位将告诉您如何解释该数字。。。您可能还需要在数字中实现一些逻辑,或者实现“表转换”,以便能够在不同的单元之间进行转换

顺便说一句: 这是一个在Smalltalk中实现的很棒的库:。它也有一个。
这是C++中的另一个非常好的例子:。

我将通过在内部以单一格式(例如,正弧度)存储值来实现这一点,并提供静态工厂方法来从各种输入格式构造角度。例如:

public class Angle {
  private final double radians;

  private Angle(double radians) {
    this.radians = radians;
  }

  // Static factory methods

  public static Angle radians(double rad) {
    return new Angle(rad);
  }

  public static Angle degrees(double deg) {
    return radians(Math.toRadians(deg));
  }

  public static Angle degreesCCW(double deg) {
    return degrees(360 - deg);
  }

  ...

  // Operations

  public Angle plus(Angle other) {
    return new Angle((this.radians + other.radians) % (2 * Math.PI));
  }

  ...
}
然后你可以这样使用它:

class Measurement
{
    double amount;
    Unit   unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);

我将通过在内部以单一格式(例如,正弧度)存储值来实现这一点,并提供静态工厂方法来从各种输入格式构造角度。例如:

public class Angle {
  private final double radians;

  private Angle(double radians) {
    this.radians = radians;
  }

  // Static factory methods

  public static Angle radians(double rad) {
    return new Angle(rad);
  }

  public static Angle degrees(double deg) {
    return radians(Math.toRadians(deg));
  }

  public static Angle degreesCCW(double deg) {
    return degrees(360 - deg);
  }

  ...

  // Operations

  public Angle plus(Angle other) {
    return new Angle((this.radians + other.radians) % (2 * Math.PI));
  }

  ...
}
然后你可以这样使用它:

class Measurement
{
    double amount;
    Unit   unit;
}
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);

你需要记住原始单位吗,或者把所有的东西都转换成类中的一个公共单位可以吗?我希望能够以各种单位存储和检索角度。我不知道在类中转换为一个单元,并在访问器上提供转换,或者保存单元(然后在访问器上进行条件转换…?)是否更好。您还可以详细说明“各种单元”吗?你有比度和弧度更多的单位吗?我有度和弧度,但这并不是促使我尝试制作角度类的原因。我现在需要转换的主要信息是顺时针=正数vs.顺时针=负数,或左手vs.右手。你需要记住原始单位吗,还是可以将所有内容转换为类中的公共单位?我希望能够以各种单位存储和检索角度。我不知道在类中转换为一个单元,并在访问器上提供转换,或者保存单元(然后在访问器上进行条件转换…?)是否更好。您还可以详细说明“各种单元”吗?你有比度和弧度更多的单位吗?我有度和弧度,但这并不是促使我尝试制作角度类的原因。我现在需要转换的主要信息是顺时针=正vs.顺时针=负,或者左手vs.右手。