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

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

Design Patterns


工厂模式

工厂模式,定义一个创建对象的接口,让子类决定实现哪一个类

使一个类的实例化延迟到其子类

/// /// Factory Pattern/// 工厂模式,定义一个创建对象的接口,让子类决定实现哪一个类/// 使一个类的实例化延迟到其子类/// 简单工厂模式不符合开放封闭原则,即对拓展开放,对修改封闭/// namespace _02_FactoryPattern{    ///     /// Opreation Class 运算类    ///     class Operation    {        private double _optionA;        private double _optionB;        public double OptionA        {            get { return _optionA; }            set { _optionA = value; }        }        public double OptionB        {            get { return _optionB; }            set { _optionB = value; }        }        ///         /// Calculations        ///         public virtual double GetResult()        {            double result = 0;            return result;        }    }    ///     /// Addtion Class    ///     class OperationAdd : Operation    {        public override double GetResult()        {            double result = OptionA + OptionB;            return result;        }    }    ///     /// Sub Class    ///     class OperationSub : Operation    {        public override double GetResult()        {            double result = 0;            result =  OptionA - OptionB;            return result;        }    }    ///     /// Factory Interface    ///     interface IFactory    {        Operation CreateOperation();    }    ///     /// Add Factory    ///     class AddFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationAdd();        }    }    ///     /// Sub Factory    ///     class SubFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationSub();        }    }    class Program    {        static void Main(string[] args)        {            //生成一个减的工厂            IFactory factory = new SubFactory();            //拿到这个工厂的实例            Operation oper = factory.CreateOperation();            //计算            oper.OptionA = 1;            oper.OptionB = 3;            double result = oper.GetResult();            WriteLine(result.ToString());            ReadKey();        }    }}

 

抽象工厂模式

提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类

/// /// 抽象工厂模式/// 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类/// namespace _04_AbstractFactoryPattern{    ///     /// 用户类    ///     class User    {        private int _id;        private string _name;        public int Id { get => _id; set => _id = value; }        public string Name { get => _name; set => _name = value; }    }    ///     /// IUser接口,用于客户端的访问,解除与具体数据库访问的耦合    ///     interface IUser    {        void Insert(User user);        User GetUser(int id);    }    ///     /// Sql Server类    ///     class SqlServerUser : IUser    {        public void Insert(User user)        {            Console.WriteLine("在Sql Server数据库中添加了一个user");        }        public User GetUser(int id)        {            Console.WriteLine("在Sql Server数据库中根据ID拿到了一个User");            return null;        }    }    ///     /// 修改程序为Access数据库访问    ///     class AccessUser : IUser    {        public void Insert(User user)        {            Console.WriteLine("Access数据库中添加了一个user");        }        public User GetUser(int id)        {            Console.WriteLine("Access数据库中根据ID拿到了一个User");            return null;        }    }    interface IFactory    {        IUser CreaterUser();    }    class SqlFactory : IFactory    {        public IUser CreaterUser()        {            return new SqlServerUser();        }    }    class AccessFactory : IFactory    {        public IUser CreaterUser()        {            return new AccessUser();        }    }    class Program    {        static void Main(string[] args)        {            User user = new User();            IFactory factory = new AccessFactory();            IUser iUser = factory.CreaterUser();            iUser.Insert(user);            iUser.GetUser(1);            Console.ReadKey();        }    }}

  

转载于:https://www.cnblogs.com/AbstractLee/p/8621705.html

你可能感兴趣的文章
windows下java环境变量标准配置
查看>>
【转】CSS
查看>>
Monkey测试环境搭建
查看>>
SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
查看>>
IOS开发 EaseMobSDK 环信快速集成
查看>>
okhttputils使用(zhuan)
查看>>
python:正则表达式
查看>>
15.指针数组名与二级指针等价,二维数组名与数组指针等价,那现在写代码尝试二维指针数组与什么样的指针等价。...
查看>>
轨道六根数 matlab,[转载]卫星的 两行星历 及转化为轨道六根数的MATLAB程序
查看>>
matlab绘制单摆相图,单摆运动―相图.ppt
查看>>
C语言程序报告4,《C语言程序设计》 验 报 告4.doc
查看>>
arduino c语言开发环境,arduino开发环境介绍
查看>>
怎么培养c语言编程思维,刚起步学习编程C语言,要具备怎样样的思维才能学得轻松?...
查看>>
c语言数组转置什么意思,什么是数组转置
查看>>
android 抽屉组件,Android组件之DrawerLayout实现抽屉菜单
查看>>
android5动画,【Android 动画】动画详解之属性动画(五)
查看>>
HTML1个像素宽的代码,CSS的父元素宽度竟然会给子元素增加1像素的宽度
查看>>
html worker 执行函数,Web Worker 详细介绍
查看>>
mcp背景中如何html图片,smtp 邮件正文镶入图片 HTML代码等全过程
查看>>
fdisk非交互自动对磁盘分区格式化
查看>>