Cố gắng triển khai mẫu trang trí trong C# từ mã trong sách "Mẫu thiết kế đầu tiên" (được viết bằng Java).Thực hiện mẫu trang trí
Tôi mới bắt đầu với C# và do đó vẫn còn mới với cú pháp, vì vậy tôi không chắc chắn lý do tại sao tôi không thể nhận được dòng nhận xét của mã bên dưới để hoạt động.
Đây là lớp trừu tượng-cơ sở đầu tiên và các lớp học có nguồn gốc của nó trong mẫu Decorator:
using System;
public abstract class Beverage
{
private String m_description;
// get a description of the beverage
public virtual String Description { get { return m_description; } }
// calculate cost of the beverage
public abstract double Cost();
}
// HouseBlend coffee implements Beverage
public class HouseBlend : Beverage
{
// Constructor
public HouseBlend() { m_description = "House Blend"; }
// calculate base cost of House Blend
public override double Cost() { return 0.89; }
}
// DarkRoast coffee implements Beverage
public class DarkRoast : Beverage
{
// Constructor
public DarkRoast() { m_description = "Dark Roast"; }
// calculate base cost of Dark Roast
public override double Cost() { return 1.00; }
}
// Espresso coffee implements Beverage
public class Espresso : Beverage
{
// Constructor
public Espresso() { m_description = "Espresso"; }
// calculate base cost of Espresso
public override double Cost() { return 1.99; }
}
Các mã vi phạm là trong phương pháp chi phí() của lớp Mocha:
using System;
// abstract base class CondimentDecorator is-a Beverage
public abstract class CondimentDecorator : Beverage {}
// Mocha implements the CondimentDecorater
public class Mocha : CondimentDecorator
{
// Condiment decorator has-a Beverage (recursion!)
private Beverage m_beverage;
// Constructor binds the object passed to member var
public Mocha(Beverage beverage)
{
this.m_beverage = beverage;
}
// getter implements abstract class Description
public override String Description
{
get
{
return m_beverage.Description + ", Mocha";
}
}
// get the Cost of the condiment plus the base-cost
// of the original beverage
public new double Cost() // ERROR: 'Mocha.Cost()' hides inherited
{ // member 'Beverage.Cost()'
return 0.20 + m_beverage.Cost();
}
}
FYI mặc dù cuốn sách sử dụng Java liên kết [book's website] (http://headfirstlabs.com/books/hfdp/) để [mẫu mã trong C#] (http://www.msquaredweb.com/ DesignPatterns/HeadFirstDesignPatternsInCSharp.zip) và C++. –
Điều cần biết. Tôi sẽ kiểm tra nó ra – dtg