C# OOP实现问题

C# OOP实现问题,c#,oop,design-patterns,C#,Oop,Design Patterns,该项目的思想是html渲染器。 但我想通过使用策略设计模式(不确定它的策略是否为D)来实现更具动态性 渲染策略: public abstract class RenderStrategy { private Element _RenderElement; public RenderStrategy(Element renderElement) { this._RenderElement = renderElement; } public a

该项目的思想是html渲染器。 但我想通过使用策略设计模式(不确定它的策略是否为D)来实现更具动态性

渲染策略:

public abstract class RenderStrategy
{
    private Element _RenderElement;
    public RenderStrategy(Element renderElement)
    {
        this._RenderElement = renderElement;
    }
    public abstract String Render();
}
要素:

public abstract class Element
{

    public String Render(RenderStrategy strategy)
    {
        return strategy.Render();
    }
}

我的问题是,如果不需要 RenderCompositeElementStrategy

我希望这样做:

public interface IStrategy 
{
   string Render();
}

public class Element : IStrategy
{
   public string Render() {
     return "rendering for element";
   }
}

public class CompositeElement : IStrategy
{
   public string Render() {
     return "rendering for composite element";
   }
}
public class HTMLRenderer
{
   private ISTrategy ele = new Element();
   private IStrategy comp = new CompositeElement();
   private IStrategy curr;
   public HTMLREnderer(){
     curr = ele; //i set default here to Element, but you can change it base on your need
   }
   public void RenderNow(){
     Console.WriteLine(curr.Render());
     //change your strategy accordingly to your need here, may be?
   }
}

不,我想这样使用它:我得到了div,它是CompositeElement,而image,它是我想说的元素:div.Render(newrenderhtml(div));或div.Render(新RenderText(div));图像渲染什么?如果与RenderHtml一起使用,问题是复合元素有子节点。元素没有子元素,要呈现div,例如,您必须调用其所有子元素的render函数,将其保存到字符串中,如果呈现html,则需要将该字符串放在div的render函数生成的字符串的中间,问题是如何在不创建重复类的情况下实现此智能