• 设计模式之抽象工厂模式


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    using System.Reflection;
    
    //抽象工厂方法
    namespace Abstract_Dactory
    {
        /// <summary>
        /// 客户端测试类
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //使用抽象层定义
                SkinFactory factory;
                Button bt;
                TextFiled tf;
                ComBox cb;
    
                //读取配置文件
                string factoryType = ConfigurationManager.AppSettings["factory"];
    
                //反射生成对象
                factory = (SkinFactory)Assembly.Load("Abstract_Dactory").CreateInstance(factoryType);
                bt = factory.CreateButton();
                tf = factory.CReateTextFiled();
                cb = factory.CreateComBox();
                bt.Display();
                tf.Display();
                cb.Display();
    
                Console.ReadKey();
            }
        }
        /// <summary>
        /// 按钮接口,充当抽象产品
        /// </summary>
        internal interface Button
        {
            void Display();
        }
        /// <summary>
        ///  Spring按钮类充当具体产品
        /// </summary>
        class SpringButton:Button
        {
            public void Display()
            {
                Console.WriteLine("显示浅绿色按钮");
            }
        }
        /// <summary>
        ///  Summer按钮类充当具体产品
        /// </summary>
        class SummerButton : Button
        {
            public void Display()
            {
                Console.WriteLine("显示浅蓝色按钮");
            }
        }
        /// <summary>
        /// 文本框接口类,充当抽象产品
        /// </summary>
        interface TextFiled
        {
            void Display();
        }
        /// <summary>
        /// Spring文本框充当具体产品
        /// </summary>
        class SpringTextFiled : TextFiled
        {
            public void Display()
            {
                Console.WriteLine("显示浅绿色文本框");
            }
        }
        /// <summary>
        /// Summer文本框充当具体产品
        /// </summary>
        class SummerTextFiled : TextFiled
        {
            public void Display()
            {
                Console.WriteLine("显示浅蓝色文本框");
            }
        }
        /// <summary>
        /// 组合框接口,充当抽象产品类
        /// </summary>
        interface ComBox
        {
            void Display();
        }
        /// <summary>
        /// Spring组合框,充当具体产品
        /// </summary>
        class SpringComBox : ComBox
        {
            public void Display()
            {
               Console.WriteLine("显示浅绿色组合框");
            }
        }
        /// <summary>
        /// Summer组合框,充当具体产品
        /// </summary>
        class SummerComBox : ComBox
        {
            public void Display()
            {
                Console.WriteLine("显示浅蓝色组合框");
            }
        }
        /// <summary>
        /// 界面工厂接口,充当抽象工厂
        /// </summary>
        interface SkinFactory
        {
            Button CreateButton();
            TextFiled CReateTextFiled();
            ComBox CreateComBox();
        }
        /// <summary>
        /// Spring皮肤工厂,充当具体工厂
        /// </summary>
        class SpringSkinFactory : SkinFactory
        {
            public Button CreateButton()
            {
                return new SpringButton();
            }
    
            public TextFiled CReateTextFiled()
            {
               return new SpringTextFiled();
            }
    
            public ComBox CreateComBox()
            {
                return new SpringComBox();
            }
        }
        /// <summary>
        /// Summer皮肤工厂,充当具体工厂
        /// </summary>
        class SummerSkinFactory : SkinFactory
        {
            public Button CreateButton()
            {
                return new SummerButton();
            }
    
            public TextFiled CReateTextFiled()
            {
                return new SummerTextFiled();
            }
    
            public ComBox CreateComBox()
            {
               return new SummerComBox();
            }
        }
    
    
    
    }

    App.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <add key="factory" value="Abstract_Dactory.SummerSkinFactory"/>
      </appSettings>
    </configuration>

    总结:

    1.更改皮肤只需修改配置文件

    2.添加新皮肤只需添加新的具体工厂与新的一族组件原有的代码不需要修改,符合开闭原则

  • 相关阅读:
    prototype的本质
    如何只用CSS做到完全居中
    CSS3 过渡效果触发时机的问题
    HTML转义字符
    SVG总结小知识
    JavaScript中Switch使用
    AngularJS注入依赖路由总结
    echart模块化单文件引入
    CSS定义input disabled样式
    海盗船长小米首页小船来回摆动CSS3.0效果
  • 原文地址:https://www.cnblogs.com/lbonet/p/7169635.html
Copyright © 2020-2023  润新知