随笔分类 - 16-设计模式
摘要:抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的单独工厂。抽象工厂模式通过提供一个超级工厂创建其他工厂的接口,使得客户端使用抽象的接口操作具体对象,从而实现客户端与具体工厂类解耦。 using System; // 抽象产品A public abstract class A
阅读全文
摘要:概念 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式 何时使用 当子系统比较复杂,我们提供一个统一的对外接口用于简化子系统调用,比如项目中每个
阅读全文
摘要:观察者模式用于解耦调用者与被调用者,项目中用的EventBus是观察者模式的实现 详细代码在这里:https://www.cnblogs.com/fanfan-90/p/11971178.html
阅读全文
摘要:Provider和Factory的区别: 可以往工厂里面添加Provider。也就是说Factory里面可能存在着许许多多的Provider。而这些Provider将是最后Factory创建出结果的必要支撑。 我们可以在项目中根据已有的provider接口,演变出各种的策略来,比如 XMLLogPr
阅读全文
摘要:定义 迭代器模式提供了一种方法,顺序访问集合对象中的元素,而又不暴露该对象的内部实现。 将集合中遍历元素的操作抽象出来,这样符合面向对象设计原则中的单一职责原则,我们要尽可能的分离这些职责,用不同的类去承担不同的责任,避免一个类中承担太多的责任。迭代器模式就是用迭代器类来承担遍历集合元素的责任。 自
阅读全文
摘要:为什么优先使用组合而不是继承 继承的起源,来自于多个类中相同特征和行为的抽象。子类可以通过继承父类,那么可以调用父类中定义的方法和属性,从而达到代码重用的目的。另外,子类除了重用父类的代码以外,还可以扩展自身的属性和方法,来描述子类特有的特征和行为。 例如:人类和马类这两个类,有什么共同的特征和行为
阅读全文
摘要:定义 责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕 案例 客户端输入校验,需要多个校验步骤,比如sql注入校验、违禁词校验、js校验 客户端调用
阅读全文
摘要:官方定义 适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作 说明 适配器模式数据结构型设计模式 当接口已经存在,通过适配器类使接口不兼容的那些类可以一起工作 案例 在电商项目中会对接多个支付接口,不同的支付接口调用方式不一样,有些是
阅读全文
摘要:什么是桥接模式 桥接模式是一种结构型设计模式,它将一个大类或一系列紧密相关的类拆分成抽象和实现两个独立的层次结构,使它们可以分别变化。桥接模式通过将抽象部分与实现部分分离,可以使它们可以独立地扩展和变化。 使用场景 如果一个系统需要在构建的抽象化角色和具体角色之间增加更多的灵活性,避免在两个层次之间
阅读全文
摘要:定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类图 应用场景 避免产生多个对象消耗过多的资源(特别是一个对象需要频繁的创建和销毁时); 提供一个全局访问点,常常被用来管理系统中共享的资源(作为一个Manager)。 实现方式 延迟初始化(懒汉模式) 适用于单线程应用程序
阅读全文
摘要:什么是状态模式 状态模式是一种行为型设计模式,它主要用来解决对象在不同状态下的行为问题。在状态模式中,一个对象的内部状态改变时,它的行为也会随之改变。实现状态模式的关键是将对象的不同状态抽象成独立的类,然后将这些状态类与原有对象关联起来组成一个状态机。 状态模式应用场景 当一个对象的行为取决于内部状
阅读全文
摘要:定义 策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换 个人理解类似委托的作用,将算法通过客户端传入,起到订制的作用 Demo 客户端: IActive active = new HighActive(); decimal payPrice = new ActiveExecut
阅读全文
摘要:概述 将一个复杂对象的构建与其表示分离,将一个复杂对象的构建过程抽象出来。 当构造函数参数有多个,且这些参数可选,考虑使用建造者模式。因为它的构建过程比较复杂, 建造者模式与工厂模式的区别:两者都是用来创建对象,封装复杂创建过程,但是建造者模式可以让客户端参与建造过程 案例: 这是我在项目中应用建造
阅读全文
摘要:定义 模板方法定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“
阅读全文
摘要:公共的发布订阅组件,不需要再在组件中写发布订阅相关逻辑,用于模块间解耦,支持排序、传参,原创~ EventContainer:发布-订阅公共组件 Array.prototype.sort = function (fn) {//数组排序 var temp; fn = fn || function (a
阅读全文
摘要:设计模式分类 创建型设计模式 关注对象的创建,new的花样就有很多 单例模式 工厂模式 工厂方法模式 原型模式 建造者模式 结构型设计模式 结构型设计模式关注类与类之间的关系,其实就是折腾组合与继承,(组合优于继承),为程序提供更好的灵活性和扩展性。 结构型设计模式本质是一样的,都是包一层,只不过招
阅读全文