zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

    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.添加新皮肤只需添加新的具体工厂与新的一族组件原有的代码不需要修改,符合开闭原则

  • 相关阅读:
    51Nod 1016 水仙花数 V2(组合数学,枚举打表法)
    April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)
    统计0到n之间1的个数[数学,动态规划dp](经典,详解)
    hihoCoder #1082 : 然而沼跃鱼早就看穿了一切(字符串处理)
    洛谷 P1876 开灯(思维,枚举,规律题)
    Codeforces 789A Anastasia and pebbles(数学,思维题)
    51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)
    机器学习(Machine Learning)&深度学习(Deep Learning)资料
    看一下你在中国属于哪个阶层?
    python读取mnist
  • 原文地址:https://www.cnblogs.com/lbonet/p/7169635.html
Copyright © 2011-2022 走看看