博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之抽象工厂模式
阅读量:6814 次
发布时间:2019-06-26

本文共 3236 字,大约阅读时间需要 10 分钟。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Reflection;//抽象工厂方法namespace Abstract_Dactory{    ///     /// 客户端测试类    ///     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();        }    }    ///     /// 按钮接口,充当抽象产品    ///     internal interface Button    {        void Display();    }    ///     ///  Spring按钮类充当具体产品    ///     class SpringButton:Button    {        public void Display()        {            Console.WriteLine("显示浅绿色按钮");        }    }    ///     ///  Summer按钮类充当具体产品    ///     class SummerButton : Button    {        public void Display()        {            Console.WriteLine("显示浅蓝色按钮");        }    }    ///     /// 文本框接口类,充当抽象产品    ///     interface TextFiled    {        void Display();    }    ///     /// Spring文本框充当具体产品    ///     class SpringTextFiled : TextFiled    {        public void Display()        {            Console.WriteLine("显示浅绿色文本框");        }    }    ///     /// Summer文本框充当具体产品    ///     class SummerTextFiled : TextFiled    {        public void Display()        {            Console.WriteLine("显示浅蓝色文本框");        }    }    ///     /// 组合框接口,充当抽象产品类    ///     interface ComBox    {        void Display();    }    ///     /// Spring组合框,充当具体产品    ///     class SpringComBox : ComBox    {        public void Display()        {           Console.WriteLine("显示浅绿色组合框");        }    }    ///     /// Summer组合框,充当具体产品    ///     class SummerComBox : ComBox    {        public void Display()        {            Console.WriteLine("显示浅蓝色组合框");        }    }    ///     /// 界面工厂接口,充当抽象工厂    ///     interface SkinFactory    {        Button CreateButton();        TextFiled CReateTextFiled();        ComBox CreateComBox();    }    ///     /// Spring皮肤工厂,充当具体工厂    ///     class SpringSkinFactory : SkinFactory    {        public Button CreateButton()        {            return new SpringButton();        }        public TextFiled CReateTextFiled()        {           return new SpringTextFiled();        }        public ComBox CreateComBox()        {            return new SpringComBox();        }    }    ///     /// Summer皮肤工厂,充当具体工厂    ///     class SummerSkinFactory : SkinFactory    {        public Button CreateButton()        {            return new SummerButton();        }        public TextFiled CReateTextFiled()        {            return new SummerTextFiled();        }        public ComBox CreateComBox()        {           return new SummerComBox();        }    }}

App.config

总结:

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

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

转载于:https://www.cnblogs.com/lbonet/p/7169635.html

你可能感兴趣的文章
Android 中间白色渐变到看不见的线的Drawable
查看>>
Oracle创建用户、表空间并设置权限
查看>>
10.5 集合ArrayList 和 io流
查看>>
机器学习简介
查看>>
四则运算使用说明
查看>>
chapter5.3类型注解及习题
查看>>
js回顾2
查看>>
Apache Storm技术实战之3 -- TridentWordCount
查看>>
C语言第三天,《常量指针和指针常量》
查看>>
linux系统中对SSD硬盘优化的方法
查看>>
BigPipe为什么可以节省时间?
查看>>
C# 特性(Attribute)学习
查看>>
构建VIM下的C++编程环境
查看>>
browserSync 工具
查看>>
一个随机排序集合的思考
查看>>
字符数组中查找字符串或字符数组
查看>>
JAVA自己理解的几种设计模式
查看>>
FFmpeg 常用命令收集
查看>>
安装 Scala
查看>>
蒙特卡罗(Monte Carlo)方法简介
查看>>