public interface IDiscount {
int getPrice(Foodfood);
}
本当に見ますか?
IDiscount.java
public interface IDiscount {
int getPrice(Foodfood);
}
Discount10Yen.java
public class Discount10Yen implements IDiscount {
public int getPrice(Foodfood) {
return food.getPrice() - 10;
}
}
DiscountStep.java
public class DiscountStep implements IDiscount {
public int getPrice(Foodfood) {
int price = food.getPrice();
return price - (price >= 200 ? 20 : 10);
}
}
Cart.java
public class Cart {
private java.util.List<Food> foods = new ArrayList<Food>();
public void add(Foodfood) {
foods.add(food);
}
public int getTotalPrice() {
int sum = 0;
for (Foodfood : foods) {
sum += food.getPrice();
}
return sum;
}
public int getTotalPrice(IDiscountdiscount) {
int sum = 0;
for (Foodfood : foods) {
sum += discount.getPrice(food);
}
return sum;
}
}
#pragma once
#include "Discount.h"
class Discount10Yen : public Discount
{
public:
Discount10Yen(void);
virtual ~Discount10Yen(void);
int getPrice(Food*);
};
#pragma once
#include "Discount.h"
class DiscountStep : public Discount
{
public:
DiscountStep(void);
virtual ~DiscountStep(void);
int getPrice(Food*);
};
#pragma once
#include <vector>
#include "Food.h"
#include "Discount.h"
class Cart
{
private:
std::vector<Food*> foods; // Food の配列
public:
Cart(void);
virtual ~Cart(void);
void add(Food*);
int getTotalPrice(void);
int getTotalPrice(Discount*);
};
Cart.cpp
#include "Cart.h"
using namespace std;
Cart::Cart(void) {}
Cart::~Cart(void) {
for (Food* food : foods)
delete food;
}
void Cart::add(Food* food)
{
foods.push_back(food);
}
int Cart::getTotalPrice(void)
{
int sum = 0;
for (Food* food : foods)
sum += food->getPrice();
return sum;
}
int Cart::getTotalPrice(Discount* d)
{
int sum = 0;
for (Food* food : foods)
sum += d->getPrice(food);
return sum;
}
public interface IDiscount
{
int getPrice(Foodfood);
}
本当に見ますか?
IDiscount.cs
public interface IDiscount
{
int getPrice(Foodfood);
}
Discount10Yen.cs
public class Discount10Yen : IDiscount
{
public int getPrice(Food food)
{
return food.getPrice() - 10;
}
}
DiscountStep.cs
public class DiscountStep : IDiscount
{
public int getPrice(Foodfood)
{
int price = food.getPrice();
if (price >= 200)
return price - 20;
else
return price - 10;
}
}
Cart.cs
using System.Collections.Generic;
public class Cart {
private List<Food> foods = new List<Food>();
public void add(Foodfood) {
foods.Add(food);
}
public int getTotalPrice() {
int sum = 0;
foreach (Foodfood in foods)
sum += food.getPrice();
return sum;
}
public int getTotalPrice(IDiscountfoods)
{
int sum = 0;
foreach (Foodfood in foods)
sum += discount.getPrice(food);
return sum;
}
}
Enshu102.vb
Module Enshu102
Sub Main()
Dim cart As Cart = New Cart()
cart.add(New Vegetable("大根", 125, 1))
cart.add(New Vegetable("レタス", 147, 1))
cart.add(New Vegetable("トマト", 69, 4))
' 割引なし
Console.WriteLine("現在の合計金額は " & c.getTotalPrice() & " 円です。")
' すべて10円値引き
Console.WriteLine("現在の合計金額は " & c.getTotalPrice(New Discount10Yen()) & " 円です。")
' 200円以上は20円、200円未満は10円値引き
Console.WriteLine("現在の合計金額は " & c.getTotalPrice(New DiscountStep()) & " 円です。")
End Sub
End Module
Public Interface IDiscount
Function getPrice(ByVal food As Food) As Integer
End Interface
本当に見ますか?
iDiscount.vb
Public Interface IDiscount
Function getPrice(ByVal food As Food) As Integer
End Interface
discount10yen.vb
Public Class Discount10Yen : Implements IDiscount
Public Function getPrice(ByVal food As Food) As Integer Implements IDiscount.getPrice
Return food.getPrice() - 10
End Function
End Class
discountStep.vb
Public Class DiscountStep : Implements IDiscount
Public Function getPrice(ByVal food As Food) As Integer Implements IDiscount.getPrice
Dim price As Integer = food.getPrice()
If price >= 200 Then
Return price - 20
Else
Return price - 10
End If
End Function
End Class
Cart.vb
Public Class Cart
Private foods As List(Of Food) = New List(Of Food)
Public Sub add(ByVal food As Food)
foods.Add(food)
End Sub
Public Function getTotalPrice() As Integer
Dim sum As Integer = 0
For Each food As Food In foodssum += food.getPrice()
Next
Return sum
End Function
Public Function getTotalPrice(ByVal discount As IDiscount) As Integer
Dim sum As Integer = 0
For Each food As Food In foodssum += discount.getPrice(food)
Next
Return sum
End Function
End Class
package Discount10Yen {
use base qw(IDiscount);
sub new {
my ($class) = @_;
return bless {}, $class;
}
sub getPrice {
my ($this, $food) = @_;
return $food->getPrice() - 10;
}
}
1;
DiscountStep.pm
package DiscountStep {
use base qw(IDiscount);
sub new {
my ($class) = @_;
return bless {}, $class;
}
sub getPrice {
my ($this, $food) = @_;
my $price = $food->getPrice();
return $price - ($price >= 200 ? 20 : 10);
}
}
1;
Cart.pm
package Cart {
sub new {
my ($class) = @_;
my $this = {foods => ()};
return bless $this, $class;
}
sub add {
my ($this, $food) = @_;
push(@{$this->{foods}}, $food);
}
sub getTotalPrice {
my ($this, $discount) = @_;
my $sum = 0;
if (!defined($discount)) {
foreach my $food (@{$this->{foods}) {
$sum += foods->getPrice();
}
}
else {
foreach my $food (@{$this->{foods}) {
$sum += $discount->getPrice($food);
}
}
return $sum;
}
}
1;
require './IDiscount'
class Discount10Yen < IDiscount
def getPrice(food)
return food.getPrice() - 10
end
end
DiscountStep.rb
require './IDiscount'
class DiscountStep < IDiscount
def getPrice(food)
price = food.getPrice()
return price - (price >= 200 ? 20 : 10)
end
end
Cart.rb
class Cart
def initialize()
@foods = []
end
def add(food)
@foods.push(food)
end
def getTotalPrice(discount=nil)
sum = 0
if discount == nil then
for food in @foodssum += food.getPrice()
end
else
for food in @foodssum += discount.getPrice(food)
end
end
return sum
end
end
from IDiscount import IDiscount
class Discount10Yen(IDiscount):
def getPrice(self, food):
return food.getPrice() - 10
DiscountStep.py
from IDiscount import IDiscount
class DiscountStep(IDiscount):
def getPrice(self, food):
price = food.getPrice()
return price - (20 if price >= 200 else 10)
Cart.py
from Food import Food
class Cart:
def __init__(self):
self.foods = []
def add(self, food):
self.foods.append(food)
def getTotalPrice(self, discount=None):
sum = 0
if discount is None:
for food in self.foods:
sum += food.getPrice()
else:
for food in self.foods:
sum += discount.getPrice(food)
return sum
import {Food} from "./Food";
export
interface IDiscount {
getPrice(food:Food):number;
}
本当に見ますか?
IDiscount.ts
import {Food} from "./Food";
export
interface IDiscount {
getPrice(food:Food):number;
}
Discount10Yen.ts
import {IDiscount} from "./IDiscount";
import {Food} from "./Food";
export
class Discount10Yen implements IDiscount {
public getPrice(food:Food):number {
return food.getPrice() - 10;
}
}
DiscountStep.ts
import {IDiscount} from "./IDiscount";
import {Food} from "./Food";
export
class DiscountStep implements IDiscount {
public getPrice(food:Food):number {
let price:number = food.getPrice();
return price - (price >= 200 ? 20 : 10);
}
}
Cart.ts
import {Food} from "./Food";
import {IDiscount} from "./IDiscount";
export
class Cart {
private foods:Array<Food> = new Array<Food>();
public add(food:Food) {
this.foods.push(food);
}
public getTotalPrice(discount?:IDiscount):number {
let sum:number = 0;
if (discount == null)
this.foods.forEach(function(food:Food) { sum += food.getPrice(); });
else
this.foods.forEach(function(food:Food) { sum += discount.getPrice(food); });
return sum;
}
}
public protocol IDiscount {
func getPrice(_ food:Food) -> Int
}
本当に見ますか?
IDiscount.swift
public protocol IDiscount {
func getPrice(_ food:Food) -> Int
}
Discount10Yen.swift
public class Discount10Yen -> IDiscount {
public func getPrice(_ food:Food) -> Int {
return food.getPrice() - 10
}
}
DiscountStep.swift
public class DiscountStep -> IDiscount {
public func getPrice(_ food:Food) -> Int {
let price:Int = food.getPrice()
return price - (price >= 200 ? 20 : 10)
}
}
Cart.swift
public class Cart {
private var foods:[Food] = []
public func add(_ food:Food) {
foods.append(food)
}
public func getTotalPrice() -> Int {
var sum:Int = 0
foods.forEach {
sum += $0.getPrice()
}
return sum
}
public func getTotalPrice(_ discount:IDiscount) -> Int {
let sum:Int = 0;
foods.forEach {
sum += discount.getPrice($0)
}
return sum
}
}
interface IDiscount {
fun getPrice(food: Food) : Int
}
本当に見ますか?
IDiscount.kt
interface IDiscount {
fun getPrice(food: Food) : Int
}
Discount10Yen.kt
class Discount10Yen : IDiscount {
override fun getPrice(food: Food) : Int = food.getPrice() - 10
}
DiscountStep.kt
class DiscountStep : IDiscount {
override fun getPrice(food: Food): Int {
val price = food.getPrice()
return price - if (price >= 200) 20 else 10
}
}
Cart.kt
class Cart {
val foods:ArrayList<Food> = ArrayList()
fun add(food: Food) {
foods.add(food)
}
fun getTotalPrice() : Int {
var sum: Int = 0
for (food in foods) {
sum += food.getPrice()
}
return sum
}
fun getTotalPrice(discount: IDiscount): Int {
var sum: Int = 0
for (food in foods) {
sum += discount.getPrice(food)
}
return sum
}
}
trait IDiscount {
def getPrice(food: Food) : Int
}
本当に見ますか?
IDiscount.scala
trait IDiscount {
def getPrice(food: Food) : Int
}
Discount10Yen.scala
class Discount10Yen extends IDiscount {
override def getPrice(food: Food) : Int = food.getPrice() - 10
}
DiscountStep.scala
class DiscountStep extends IDiscount {
override def getPrice(food: Food): Int = {
val price = food.getPrice()
price - (if (price >= 200) 20 else 10)
}
}
Cart.scala
import scala.collection.mutable.ListBuffer
class Cart {
private val foods = new ListBuffer[Food]()
def add(food: Food) {
foods.addOne(food)
}
def getTotalPrice() : Int = {
var sum: Int = 0
for (food <- foods) {
sum += food.getPrice()
}
sum
}
def getTotalPrice(discount: IDiscount) : Int = {
var sum = 0
for (food <- foods) {
sum += discount.getPrice(food)
}
sum
}
}
class Discount10Yen implements IDiscount {
int getPrice(Foodfood) {
return food.getPrice() - 10
}
}
DiscountStep.groovy
class DiscountStep implements IDiscount {
int getPrice(Foodfood) {
int price = food.getPrice()
return price - (price >= 200 ? 20 : 10)
}
}
Cart.groovy
class Cart {
java.util.List<Food> foods = new ArrayList<Food>()
void add(Foodfood) {
foods.add(food)
}
int getTotalPrice() {
int sum = 0
for (Foodfood : foods) {
sum += food.price
}
return sum
}
int getTotalPrice(IDiscount discount) {
int sum = 0
for (Foodfood : foods) {
sum += discount.getPrice(food)
}
return sum
}
}
public interface IDiscount {
int getPrice(Foodfood);
}
本当に見ますか?
idiscount.d
import food;
public interface IDiscount {
int getPrice(Foodfood);
}
discount10yen.d
import idiscount;
import food;
public class Discount10Yen : IDiscount {
public int getPrice(Foodfood) {
return food.getPrice() - 10;
}
}
discountstep.d
import idiscount;
import food;
public class DiscountStep : IDiscount {
public int getPrice(Foodfood) {
int price = food.getPrice();
return price - (price >= 200 ? 20 : 10);
}
}
cart.d
import food;
public class Cart {
private Food[] foods;
public void add(Foodfood) {
foods ~= food;
}
public int getTotalPrice() {
int sum = 0;
foreach (Foodfood ; foods) {
sum += food.getPrice();
}
return sum;
}
import idiscount;
public int getTotalPrice(IDiscount discount) {
int sum = 0;
foreach (Foodfood ; foods) {
sum += discount.getPrice(food);
}
return sum;
}
}
unit UnitIDiscount;
interface
uses
UnitFood;
type
IDiscount = interface
function getPrice(_food:Food):integer;
end;
implementation
end.
本当に見ますか?
IDiscount.pas
unit UnitIDiscount;
interface
uses
UnitFood;
type
IDiscount = interface
function getPrice(_food:Food):integer;
end;
implementation
end.
Discount10Yen.pas
unit UnitDiscount10Yen;
interface
uses
UnitIDiscount,
UnitFood;
type
Discount10Yen = class(TInterfacedObject, IDiscount)
public
function getPrice(_food:Food):integer;
end;
implementation
function Discount10Yen.getPrice(_food:Food):integer;
begin
Result := _food.getPrice() - 10;
end;
end.
DiscountStep.pas
unit UnitDiscountStep;
interface
uses
System.Math,
UnitIDiscount,
UnitFood;
type
DiscountStep = class(TInterfacedObject, IDiscount)
public
function getPrice(_food:Food):integer;
end;
implementation
function DiscountStep.getPrice(_food:Food):integer;
var price:integer;
begin
price := _food.getPrice();
Result := price - IfThen(price >= 200, 20, 10);
end;
end.
Cart.pas
unit UnitCart;
interface
uses
System.Generics.Collections,
UnitFood,
UnitIDiscount;
type
Cart = class
private
var foods:TList<Food>;
public
constructor Create();
destructor Destroy(); override;
procedure add(_food:Food);
function getTotalPrice():integer; overload;
function getTotalPrice(discount:IDiscount):integer; overload;
end;
implementation
constructor Cart.Create();
begin
foods := TList<Food>.Create();
end;
destructor Cart.Destroy();
var _food:Food;
begin
for _food in foods do begin
_food.Free;
end;
foods.Free;
inherited Destroy();
end;
procedure Cart.add(_food:Food);
begin
foods.Add(_food);
end;
function Cart.getTotalPrice():integer;
var sum:integer;
var _food:Food;
begin
sum := 0;
for _food in foods do begin
sum := sum + _food.getPrice();
end;
Result := sum;
end;
function Cart.getTotalPrice(discount:IDiscount):integer;
var sum:integer;
var _food:Food;
begin
sum := 0;
for _food in foods do begin
sum := sum + discount.getPrice(_food);
end;
Result := sum;
end;
end.