public class SingleOrdinary : StateOrdinary
{
private static SingleOrdinaryinstance = new SingleOrdinary(); // インスタンスを生成する
private SingleOrdinary() { } // new によるインスタンス生成を許さない
public static State getInstance()
{
return instance; // インスタンスを得る
}
}
本当に見ますか?
SingleLimitedSpecial.cs
public class SingleLimitedSpecial : StateLimitedSpecial
{
private static SingleLimitedSpecialinstance = new SingleLimitedSpecial(); // インスタンスを生成する
private SingleLimitedSpecial() { } // new によるインスタンス生成を許さない
public static State getInstance()
{
return instance; // インスタンスを得る
}
}
SingleSpecial.cs
public class SingleSpecial : StateSpecial
{
private static SingleSpecial instance = new SingleSpecial(); // インスタンスを生成する
private SingleSpecial() { } // new によるインスタンス生成を許さない
public static State getInstance()
{
return instance; // インスタンスを得る
}
}
SingleOrdinary.cs
public class SingleOrdinary : StateOrdinary
{
private static SingleOrdinaryinstance = new SingleOrdinary(); // インスタンスを生成する
private SingleOrdinary() { } // new によるインスタンス生成を許さない
public static State getInstance()
{
return instance; // インスタンスを得る
}
}
Enshu502.vb
Module Enshu502
Private wagon As Wagon = New Wagon(100) ' ワゴン(100円)
Sub Main()
Console.WriteLine("1. いつもどおり")
Console.WriteLine("2. サービス")
Console.WriteLine("3. 大サービス")
While True
Console.Write("番号>")
' 選ばれた番号によって状態を変更する
Dim n As String = Console.ReadLine()
If n = "1" Then
wagon.setState(SingleOrdinary.getInstance()) ' いつもどおり
ElseIf n = "2" Then
wagon.setState(SingleSpecial.getInstance()) ' サービス
ElseIf n = "3" Then
wagon.setState(SingleLimitedSpecial.getInstance()) ' 大サービス
Else
Exit While
End If
buy(500) ' 500円
buy(1000) ' 1000円
End While
End Sub
Private Sub buy(payment As Integer) ' payment:支払金額
Dim bought As Integer = wagon.buy(payment) ' bought :購入できた個数
Console.WriteLine(wagon.getMessage() & "なので、" &
payment & "円で" & bought & "個買えた。")
End Sub
End Module
Public Class SingleOrdinary : Inherits StateOrdinary
Private Shared instance As SingleOrdinary = New SingleOrdinary() ' インスタンスを生成する
Private Sub New() ' New によるインスタンス生成を許さない
End Sub
Public Shared Function getInstance() As State
Return instance ' インスタンスを得る
End Function
End Class
本当に見ますか?
SingleLimitedSpecial.vb
Public Class SingleLimitedSpecial : Inherits StateLimitedSpecial
Private Shared instance As SingleLimitedSpecial = New SingleLimitedSpecial() ' インスタンスを生成する
Private Sub New() ' New によるインスタンス生成を許さない
End Sub
Public Shared Function getInstance() As State
Return instance ' インスタンスを得る
End Function
End Class
SingleSpecial.vb
Public Class SingleSpecial : Inherits StateSpecial
Private Shared instance As SingleSpecial = New SingleSpecial() ' インスタンスを生成する
Private Sub New() ' New によるインスタンス生成を許さない
End Sub
Public Shared Function getInstance() As State
Return instance ' インスタンスを得る
End Function
End Class
SingleOrdinary.vb
Public Class SingleOrdinary : Inherits StateOrdinary
Private Shared instance As SingleOrdinary = New SingleOrdinary() ' インスタンスを生成する
Private Sub New() ' New によるインスタンス生成を許さない
End Sub
Public Shared Function getInstance() As State
Return instance ' インスタンスを得る
End Function
End Class
use StateOrdinary;
package SingleOrdinary {
use base qw(StateOrdinary);
use feature 'state';
state $instance = undef;
sub _new {
return bless {};
}
sub getInstance {
return $instance ||= _new();
}
}
1;
本当に見ますか?
SingleLimitedSpecial.pm
use StateLimitedSpecial;
package SingleLimitedSpecial {
use base qw(StateLimitedSpecial);
use feature 'state';
state $instance = undef;
sub _new {
return bless {};
}
sub getInstance {
return $instance ||= _new();
}
}
1;
SingleSpecial.pm
use StateSpecial;
package SingleSpecial {
use base qw(StateSpecial);
use feature 'state';
state $instance = undef;
sub _new {
return bless {};
}
sub getInstance {
return $instance ||= _new();
}
}
1;
SingleOrdinary.pm
use StateOrdinary;
package SingleOrdinary {
use base qw(StateOrdinary);
use feature 'state';
state $instance = undef;
sub _new {
return bless {};
}
sub getInstance {
return $instance ||= _new();
}
}
1;
Enshu502.rb
require './Wagon'
require './SingleOrdinary'
require './SingleSpecial'
require './SingleLimitedSpecial'
def buy(payment) # payment:支払金額
bought = @wagon.buy(payment); # bought :購入できた個数
puts "#{@wagon.getMessage()}なので、#{payment}円で#{bought}個買えた。"
end
@wagon = Wagon.new(100)
puts "1. いつもどおり"
puts "2. サービス"
puts "3. 大サービス"
while true
print "番号>"
no = gets.to_s.chomp # 文字列の入力
if (no == "1") # 通常
@wagon.setState(SingleOrdinary::getInstance())
elsif (no == "2") # サービス
@wagon.setState(SingleSpecial::getInstance())
elsif (no == "3") # 大サービス
@wagon.setState(SingleLimitedSpecial::getInstance())
else
break
end
buy(500) # 500円
buy(1000) # 1000円
end
require './StateOrdinary'
class SingleOrdinary < StateOrdinary@@singleton = SingleOrdinary.new()
def self.getInstance()
return @@singleton
end
end
本当に見ますか?
SingleLimitedSpecial.rb
require './StateLimitedSpecial'
class SingleLimitedSpecial < StateLimitedSpecial@@singleton = SingleLimitedSpecial.new()
def self.getInstance()
return @@singleton
end
end
SingleSpecial.rb
require './StateSpecial'
class SingleSpecial < StateSpecial@@singleton = SingleSpecial.new()
def self.getInstance()
return @@singleton
end
end
SingleOrdinary.rb
require './StateOrdinary'
class SingleOrdinary < StateOrdinary@@singleton = SingleOrdinary.new()
def self.getInstance()
return @@singleton
end
end
from StateOrdinary import StateOrdinary
class SingleOrdinary(StateOrdinary):
__instance = None
@classmethod
def getInstance(cls):
if not cls.__instance:
cls.__instance = cls()
return cls.__instance
本当に見ますか?
SingleLimitedSpecial.py
from StateLimitedSpecial import StateLimitedSpecial
class SingleLimitedSpecial(StateLimitedSpecial):
__instance = None
@classmethod
def getInstance(cls):
if not cls.__instance:
cls.__instance = cls()
return cls.__instance
StateSpecial.py
from StateSpecial import StateSpecial
class SingleSpecial(StateSpecial):
__instance = None
@classmethod
def getInstance(cls):
if not cls.__instance:
cls.__instance = cls()
return cls.__instance
SingleOrdinary.py
from StateOrdinary import StateOrdinary
class SingleOrdinary(StateOrdinary):
__instance = None
@classmethod
def getInstance(cls):
if not cls.__instance:
cls.__instance = cls()
return cls.__instance
class SingleOrdinary : StateOrdinary() {
companion object {
private val instance = SingleOrdinary()
fun getInstance(): State = instance
}
}
本当に見ますか?
SingleLimitedSpecial.kt
class SingleLimitedSpecial : StateLimitedSpecial() {
companion object {
private val instance = SingleLimitedSpecial()
fun getInstance(): State = instance
}
}
SingleSpecial.kt
class SingleSpecial : StateSpecial {
companion object {
private val instance = SingleSpecial()
fun getInstance(): State = instance
}
}
SingleOrdinary.kt
class SingleOrdinary : StateOrdinary() {
companion object {
private val instance = SingleOrdinary()
fun getInstance(): State = instance
}
}
Enshu502.scala
object Main502 {
private val wagon = new Wagon(100) // ワゴン(100円)
def main(args: Array[String])
System.out.println("1. いつもどおり")
System.out.println("2. サービス")
System.out.println("3. 大サービス")
var n: Int = 0
while (true) {
System.out.print("番号>")
try {
val no: String = io.StdIn.readLine()
n = no.toInt
}
catch {
case _ => System.exit(0)
}
if (n == 1) // 通常
wagon.setState(SingleOrdinary.getInstance())
else if (n == 2) // サービス
wagon.setState(SingleSpecial.getInstance())
else if (n == 3) // 大サービス
wagon.setState(SingleLimitedSpecial.getInstance())
else
System.exit(0)
buy(500) // 500円
buy(1000) // 1000円
}
}
private def buy(payment: Int) { // payment:支払金額
val bought: Int = wagon.buy(payment) // bought :購入できた個数
System.out.println("%sなので、%s円で%d個買えた。".format(wagon.getMessage(), payment, bought))
}
}
object SingleOrdinary {
private val instance = new SingleOrdinary()
def getInstance(): State = instance
}
class SingleOrdinary private() extends StateOrdinary() {} // new によるインスタンス生成を許さなくする
本当に見ますか?
SingleLimitedSpecial.scala
object SingleLimitedSpecial {
private val instance = new SingleLimitedSpecial()
def getInstance(): State = instance
}
class SingleLimitedSpecial private() extends StateLimitedSpecial() {} // new によるインスタンス生成を許さなくする
SingleSpecial.scala
object SingleSpecial {
private val instance = new SingleSpecial()
def getInstance(): State = instance
}
class SingleSpecial private() extends StateSpecial() {} // new によるインスタンス生成を許さなくする
SingleOrdinary.scala
object SingleOrdinary {
private val instance = new SingleOrdinary()
def getInstance(): State = instance
}
class SingleOrdinary private() extends StateOrdinary() {} // new によるインスタンス生成を許さなくする
Enshu502.groovy
class Enshu502 {
private Wagonwagon = new Wagon(100) // ワゴン(100円)
static void main(String[] args) {
Enshu502en = new Enshu502()
en.exec()
}
void exec() {
System.out.println("1. いつもどおり")
System.out.println("2. サービス")
System.out.println("3. 大サービス")
String no
int n
while (true) {
System.out.print("番号>")
try {
no = System.in.newReader().readLine()
n = Integer.parseInt(no)
}
catch(Exceptione) {
return
}
if (n == 1) // 通常
wagon.setState(SingleOrdinary.getInstance())
else if (n == 2) // サービス
wagon.setState(SingleSpecial.getInstance())
else if (n == 3) // 大サービス
wagon.setState(SingleLimitedSpecial.getInstance())
else
return
buy(500) // 500円
buy(1000) // 1000円
}
}
private void buy(int payment) { // payment:支払金額
int bought = wagon.buy(payment) // bought :購入できた個数
System.out.println(wagon.getMessage() + "なので、"
+ payment + "円で" + bought + "個買えた。")
}
}
import state;
import stateordinary;
import wagon;
public class SingleOrdinary : StateOrdinary {
private static StateOrdinaryinstance;
private static this() {
instance = new StateOrdinary();
}
private this() {} // new によるインスタンス生成を許さなくする
public static State getInstance() {
return instance;
}
}
本当に見ますか?
singlelimitedspecial.d
import state;
import statelimitedspecial;
import wagon;
public class SingleLimitedSpecial : StateLimitedSpecial {
private static SingleLimitedSpecialinstance;
private static this() {
instance = new SingleLimitedSpecial();
}
private this() {} // new によるインスタンス生成を許さなくする
public static State getInstance() {
return instance;
}
}
singlespecial.d
import state;
import statespecial;
import wagon;
public class SingleSpecial : StateSpecial {
private static SingleSpecial instance;
private static this() {
instance = new SingleLimitedSpecial();
}
private this() {} // new によるインスタンス生成を許さなくする
public static State getInstance() {
return instance;
}
}
singleordinary.d
import state;
import stateordinary;
import wagon;
public class SingleOrdinary : StateOrdinary {
private static StateOrdinaryinstance;
private static this() {
instance = new StateOrdinary();
}
private this() {} // new によるインスタンス生成を許さなくする
public static State getInstance() {
return instance;
}
}
Enshu502.dpr
program Enshu502;
uses
System.SysUtils,
UnitWagon,
UnitSingleLimitedSpecial,
UnitSingleSpecial,
UnitSingleOrdinary;
var _wagon:Wagon;
procedure buy(payment:integer);
var bought:integer;
begin
bought := _wagon.buy(payment); // bought :購入できた個数
Writeln(Format('%sなので、%d円で%d個買えた。', [_wagon.getMessage(), payment , bought]));
end;
var no:string;
begin
_wagon := Wagon.Create(100); // ワゴン(100円)
Writeln('1. いつもどおり');
Writeln('2. サービス');
Writeln('3. 大サービス');
while (true) do begin
Write('番号>');
Readln(no);
if no = '1' then begin // 通常
_wagon.setState(SingleOrdinary.Create());
end
else if no = '2' then begin // サービス
_wagon.setState(SingleSpecial.Create());
end
else if no = '3' then begin // 大サービス
_wagon.setState(SingleLimitedSpecial.Create());
end
else begin
exit;
end;
buy(500); // 500円
buy(1000); // 1000円
end;
end.
unit UnitSingleOrdinary;
interface
uses
UnitStateOrdinary,
UnitState;
type
SingleOrdinary = class(StateOrdinary)
private
class var instance:SingleOrdinary;
class constructor Create();
public
class function getInstance():SingleOrdinary;
end;
implementation
class constructor SingleOrdinary.Create();
begin
instance := SingleOrdinary.Create();
end;
class function SingleOrdinary.getInstance():SingleOrdinary;
begin
Result := instance;
end;
end.
本当に見ますか?
SingleLimitedSpecial.pas
unit UnitSingleLimitedSpecial;
interface
uses
UnitStateLimitedSpecial,
UnitState;
type
SingleLimitedSpecial = class(StateLimitedSpecial)
private
class var instance:SingleLimitedSpecial;
class constructor Create();
public
class function getInstance():SingleLimitedSpecial;
end;
implementation
class constructor SingleLimitedSpecial.Create();
begin
instance := SingleLimitedSpecial.Create();
end;
class function SingleLimitedSpecial.getInstance():SingleLimitedSpecial;
begin
Result := instance;
end;
end.
SingleSpecial.pas
unit UnitSingleSpecial;
interface
uses
UnitStateSpecial,
UnitState;
type
SingleSpecial = class(StateSpecial)
private
class var instance:SingleSpecial;
class constructor Create();
public
class function getInstance():SingleSpecial;
end;
implementation
class constructor SingleSpecial.Create();
begin
instance := SingleSpecial.Create();
end;
class function SingleSpecial.getInstance():SingleSpecial;
begin
Result := instance;
end;
end.
SingleOrdinary.pas
unit UnitSingleOrdinary;
interface
uses
UnitStateOrdinary,
UnitState;
type
SingleOrdinary = class(StateOrdinary)
private
class var instance:SingleOrdinary;
class constructor Create();
public
class function getInstance():SingleOrdinary;
end;
implementation
class constructor SingleOrdinary.Create();
begin
instance := SingleOrdinary.Create();
end;
class function SingleOrdinary.getInstance():SingleOrdinary;
begin
Result := instance;
end;
end.