设计模式
Bear Coding
这个作者很懒,什么都没留下…
展开
-
设计模式之责任链模式(八)
定义一系列的实现类和一个数据上下文context。实现类相互关联,形成一个链式结构,实现类根据上下文中的枚举值或者范围值定义不同的操作。 例如请假时间<=3天的,第一个实现类(项目经理)处理。请假时间<=7天的,第一个实现类转交给第二个实现类(开发主管)处理。请假时间>=7天的,第二个实现类转交给第三个实现类(总经理)处理。 //审核上下文 public cl...原创 2020-04-24 16:42:23 · 1323 阅读 · 0 评论 -
设计模式之装饰器模式(五)
装饰器模式可以在不改变原有代码的情况下, 通过新增子类(实现类)的方式扩展功能,不断的新增新的功能。 举例:就以人类Person穿衣服为例,最初产品需求,原始人类只需要戴个帽子就可以了;如以下代码 public interface IPerson { /// <summary> /// 穿衣服 /// </su...原创 2020-03-23 18:10:43 · 1647 阅读 · 0 评论 -
设计模式之单例模式(七)
单例模式保证整个程序运行期间最多只有一个实例;可以实现对象的复用,减少对象多次构造所带来的时间损耗和占用资源。一般只有在必须保证只有一个实例,多个实例反而会出问题的情况下使用, 也可以直接利用IOC容器来实现单例的效果。 以下是单例模式(C#)的三种实现方式: public class Singletion { private Singletion() { }...原创 2020-01-21 14:32:21 · 1742 阅读 · 0 评论 -
设计模式之代理模式(六)
代理模式顾名思义,就是“代理者”帮别人去做事,但是在帮人做事的前后,这个“代理者”可以做一些其它的逻辑。比如日志代理、缓存代理、权限代理。也属于AOP的思想,可以在不改变原始类的情况下进行功能扩展。 如有以下原始类: public abstract class StudentBase { public string name { get; set; } ...原创 2020-01-20 10:41:31 · 1664 阅读 · 0 评论 -
设计模式之抽象工厂(三)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 //用户信息 public interface IUser { void InsertUser(); void GetUserInfo(); } //用户信息MySql public class User_MySql : IUser ...原创 2019-03-15 14:47:25 · 2707 阅读 · 0 评论 -
设计模式之工厂方法(二)
工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。 简单工厂vs工厂方法: 简单工厂最大的优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端而言,去除了与具体产品的依赖。 工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂的内部逻辑移到了客户端代...原创 2019-03-15 11:38:52 · 2733 阅读 · 0 评论 -
设计模式之简单工厂(一)
设计模式用于解决软件开发过程中所遇到的问题,大致归纳为23种设计模式;设计模式没有固定的使用方式。完全可以根据自己的需要进行相应的修改,也可以多个设计模式合作使用。不必拘泥于现有的解决方式。在学习设计模式之前可以先简单看看六大设计原则。 简单工厂的优点在于内部包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类,对于客户端而言去除了于具体产品的依赖;但是如果需要拓展新的逻辑则必须修改逻辑判...原创 2019-03-15 11:18:45 · 2761 阅读 · 0 评论 -
设计模式之模板方法(四)
最近做了一个微信模板消息推送的功能,正好用到了模板方法设计模式;在微信模板消息推送功能中。除了各个微信模板之间的内容(模板参数)不同之外,其它的逻辑是一样的。使用模板方法设计模式之后,如果要新增、修改或删除微信模板的时候只需要编辑对应的模板实现类。不会影响其它模板功能。 代码都是删减过的,只是提供一个范例。 1、模板抽象类 public abstract class Template...原创 2019-08-09 11:42:54 · 2194 阅读 · 0 评论 -
设计模式之装饰器模式(五)
装饰器模式可以在不修改原有代码的情况下给它增加一个或多个顺序可变的扩展功能,且不破环原有代码的封装性,使用了OOP的组合+继承的方式来实现,是一种AOP编程思想的设计模式。 现有如下代码: //学生基类 public abstract class StudentBase { public string name { get; set; } ...原创 2020-01-19 14:30:59 · 1703 阅读 · 0 评论