次の状況を考慮してください。
組み込み(モデム)デバイス用のJavaプログラムを作成します。SDKはCloneableを提供していません。したがって、私はclass GsmSignalStrength
メソッドclone()
にありますが、それはからではなく、Object.clone()
「私の」実装です。GsmSignalStrength
これが便利で正しいのか、コメントのようにでコピーコンストラクターを使用する必要があるのか知りたいのですが。StateMachineに別のGsmSignalStrengthオブジェクトを作成する必要があるため、コピーコンストラクターの利点はわかりません。
これが私のコードです...
ファイル1"Status.java":
class Status
{
Status(GsmSignalStrength gsmSignalStrength)
{
initClass(gsmSignalStrength);
}
GsmSignalStrength gsmSignalStrength;
private void initClass(GsmSignalStrength gsmSignalStrength)
{
this.gsmSignalStrength = gsmSignalStrength;
}
}
ファイル2「GsmSignalStrength」:
class GsmSignalStrength
{
GsmSignalStrength(byte signalStrength)
{
initClass(signalStrength);
}
GsmSignalStrength()
{
initClass(100);
}
byte value;
public void copyTo(GsmSignalStrength destination)
{
destination.value = this.value;
}
public GsmSignalStrength clone()
{
GsmSignalStrength clonedValue = new GsmSignalStrength();
this.copyTo(clonedValue);
return clonedValue;
}
/* With copy constructor
GsmSignalStrength(GsmSignalStrength gsmSignalStrength)
{
gsmSignalStrength.value = value;
}
*/
private void initClass(byte signalStrength)
{
this.value = signalStrength;
}
}
ファイル5「GsmModemHandler」:
class GsmModemHandler
{
GsmModemHandler()
{
initClass();
}
private GsmSignalStrength m_gsmSignalStrength;
GsmSignalStrength getGsmSignalStrength()
{
...bla...
return m_gsmSignalStrength;
}
private void initClass()
{
m_gsmSignalStrength = new GsmSignalStrength();
}
}
ファイル4「StateMachine」:
class StateMachine
{
StateMachine(GsmModemHandler gsmModemHandler)
{
initClass(gsmModemHandler);
}
private GsmModemHandler m_gsmModemHandler;
void doSomething()
{
GsmSignalStrength gsmSignalStrength = m_gsmModemHandler.getGsmSignalStrength();
Status xy = new Status(gsmSignalStrength.clone());
/* With copy constructor
GsmSignalStrength gsmSignalStrengthCopy = new GsmSignalStrength(gsmSignalStrength);
Status xy = new Status(gsmSignalStrengthCopy);
*/
}
private void initClass(GsmModemHandler gsmModemHandler)
{
m_gsmModemHandler = gsmModemHandler;
}
}