抽象工厂模式

抽象工厂模式

产品等级结构:产品的继承结构 电视机与海尔电视机、海信电视机、TCL电视机
产品族:由同一个工厂生产 不同产品等级结构中的一组产品 海尔电器工厂与海尔电视机、海尔电冰箱

定义:提供一个创建一系列相关或相互依赖对象的接口,无须指定具体的类

抽象工厂:声明一组用于创建一族产品的方法
具体工厂:方法实现
抽象产品:为每种产品声明接口
具体产品:定义具体产品对象 实现业务方法

client
«interface»
AbstractFactory
+CreateProductA()
+CreateProductB()
«interface»
AbstractProductA
«interface»
AbstractProductB
ConcreteFactory1
+CreateProductA()
+CreateProductB()
ConcreteFactory2
+CreateProductA()
+CreateProductB()
ConcreteProductA1
ConcreteProductA2
ConcreteProductB1
ConcreteProductB2

示例:界面皮肤库结构示意图

皮肤库
Spring分格
Summer分格
浅绿色按钮
绿色文本框
绿色组合框
浅蓝色按钮
蓝色文本框
蓝色组合框

类图:

<>
<>
<>
<>
<>
<>
client
«interface»
Button
+Display()
«interface»
TextField
+Display()
«interface»
ComboBox
+Display()
«interface»
SkinFactory
+CreateButton()
+CreateTextField()
+CreateComboBox()
SpringSkinFactory
+CreateButton()
+CreateTextField()
+CreateComboBox()
SummerSkinFactory
+CreateButton()
+CreateTextField()
+CreateComboBox()
SpringButton
+Display()
SpringTextField
+Display()
SpringComboBox
+Display()
SummerButton
+Display()
SummerTextField
+Display()
SummerComboBox
+Display()

实例代码

    interface Button
    {
        void Display();
    }

    interface TextField
    {
        void Display();
    }

    interface ComboBox
    {
        void Display();
    }
    interface SkinFactory
    {
        Button CreateButton();
        TextField CreateTextField();
        ComboBox CreateComboBox();
    }
    
    class SpringButton : Button
    {
        public void Display()
        {
            Console.WriteLine("SpringButton");
        }
    }

    class SummerButton : Button
    {
        public void Display()
        {
            Console.WriteLine("SummerButton");
        }
    }

    class SpringTextField : TextField
    {
        public void Display()
        {
            Console.WriteLine("SpringTextField");
        }
    }

    class SummerTextField : TextField
    {
        public void Display()
        {
            Console.WriteLine("SummerTextField");
        }
    }
    
    class SpringComboBox : ComboBox
    {
        public void Display()
        {
            Console.WriteLine("SpringComboBox");
        }
    }

    class SummerComboBox : ComboBox
    {
        public void Display()
        {
            Console.WriteLine("SummerComboBox");
        }
    }
    
    class SpringSkinFactory : SkinFactory
    {
        public Button CreateButton()
        {
           return  new SpringButton();
        }

        public ComboBox CreateComboBox()
        {
            return new SpringComboBox();
        }

        public TextField CreateTextField()
        {
            return new SpringTextField();
        }
    }
    
    
    class SummerSkinFactory : SkinFactory
    {
        public Button CreateButton()
        {
            return new SummerButton();
        }

        public ComboBox CreateComboBox()
        {
            return new SummerComboBox();
        }

        public TextField CreateTextField()
        {
            return new SummerTextField();
        }
    }

//main test

            SkinFactory factory;
            Button bt;
            TextField tf;
            ComboBox cb;

            //读取配置文件
            string factoryType = ConfigurationManager.AppSettings["factory"];

            //反射生成对象
            factory = (SkinFactory)Assembly.Load("AbstractFactory").CreateInstance(factoryType);
            bt = factory.CreateButton();
            tf = factory.CreateTextField();
            cb = factory.CreateComboBox();
            bt.Display();
            tf.Display();
            cb.Display();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值