设计模式(4)——抽象工厂模式

工厂类虽然快捷方便和易于扩展,但是每一个具体工厂类只能生产一类产品。如果需要多组的产品类,则系统中就会存在大量的工厂类,会增加系统资源的消耗。
抽象工厂模式就可以很好的解决这种问题。

1.抽象工厂模式概述:
—>抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。

如果现在有3个空间:Button , TextBox 和RadioBox。 我们需要为它们设计两种风格的皮肤,如果使用工厂模式,我们就需要设计很多工厂类。但如果我们使用抽象模式就只需要设计2个工厂类和一个抽象工厂类即可。

1.定义控件接口

 public  interface Button
    {
        void BtnDisplay();
    }
  public  interface TextBox
    {
        void TxtDisplay();
    }
public  interface RadioBox
    {
        void RdoDisplay();
    }

2.实现这些空间的两种风格:

  public  class SpringButton : Button
    {

        public void BtnDisplay()
        {
            Console.WriteLine("浅绿色按钮。。。");
        }
    }

 public   class SummerButton : Button
    {

        public void BtnDisplay()
        {
            Console.WriteLine("浅蓝色按钮。。。");
        }
    }

public class SpringTextBox : TextBox
{

    public void TxtDisplay()
    {
        Console.WriteLine("浅绿色文本框。。。");
    }
}

public class SummerTextBox : TextBox
{

    public void TxtDisplay()
    {
        Console.WriteLine("浅蓝色文本框。。。");
    }
}

public class SpringRadioBox : RadioBox
{

    public void RdoDisplay()
    {
        Console.WriteLine("浅绿色单选框。。。");
    }
}

public class SummerRadioBox : RadioBox
{

    public void RdoDisplay()
    {
        Console.WriteLine("浅蓝色的单选框。。。");
    }
}

3.定义工厂接口:

   public interface Factory
    {
        Button GetButton();
        TextBox GetTextBox();
        RadioBox GetRadioBox();

    }

4.实现两种风格的工厂类:

  public    class SpringFactory : Factory
    {

        public Button GetButton()
        {
            return new SpringButton();
        }

        public TextBox GetTextBox()
        {
            return new SpringTextBox();
        }

        public RadioBox GetRadioBox()
        {
            return new SpringRadioBox();
        }
    }

   public  class SummerFactory : Factory
    {

        public Button GetButton()
        {
            return new SummerButton();
        }

        public TextBox GetTextBox()
        {
            return new SummerTextBox();
        }

        public RadioBox GetRadioBox()
        {
            return new SummerRadioBox();
        }
    }

5.测试代码:

 static void Main(string[] args)
        {
            Factory fa;
            Button btn;
            TextBox txt;
            RadioBox rad;

            fa = new SpringFactory();
            btn = fa.GetButton();
            txt = fa.GetTextBox();
            rad = fa.GetRadioBox();

            btn.BtnDisplay();
           txt.TxtDisplay();
            rad.RdoDisplay();

            Console.ReadLine();
        }

总结:
—>虽然抽象工厂类可以很方便的创建一组产品族,但是如果再添加一个新控件就需要修改源代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值