单例模式:对于类的单例模式设计,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 单例模式有8种方式: 1、饿汉式(静态常量) //2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全
工厂设计模式: 顾名思义,该模式是用来生产对象的。在面向对象的设计模式中,万物皆对象,若使用new来创建对象,就会对该对象产生强耦合,加入我们需要更换该对象,那么使用该对象的对象都需要进行修改,这显然违背了开闭原则(OCP)。如果我们使用工厂来产生对象,我们只需要与这个工厂打交道就可以了,无需关心具体的对象,达到解耦的目的。
前一章节,我们介绍了简单工厂模式以及工厂方法模式,但是这两种模式都存在一定的局限性,只能生产某一类型下的某一种产品,如果需求变更,同类型下出现了不同的产品,比如芝士披萨不仅有口味上的不同,同时存在外观上的不同。这种时候,工厂模式显然不再满足要求,该怎么办呢?于是我们想到DIP原则,它不正是为了解决这种情况而存在的吗?接下来我们来介
引言: 原型模式是什么?它是在什么场景下被提出的呢?本章节,我们将详细了解下原型模式。 在软件系统中,当创建一个类的实例过程过于昂贵或复杂,并且我们需要创建多个这样类的实例时,如果我们通过new来创建类实例,这就会增加创建类的复杂度和创建过程与客户代码复杂的耦合度。如果采用工厂模式来创建这样的实例对象的话,随着产品类的不断
引言: 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、底盘、发动机、方向盘等各种部件。而对于大部分用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车。有的人说:抽象工厂模式不是用来生产产品的吗,我们使用它来解决不是可以了吗?貌似有一定
设计模式六大原则: 1、单一职责原则(SingleResponsibilityPrinciple) 2、历史替换原则(LiskovSubstitutionPrinciple) 3、依赖倒置原则(DependenceInversionPrinciple) 4、接口隔离原则(InterfaceSegregationPrinciple) 5、迪米特法则(LawOfDemeter)//最少知道原则 6、开闭原则(OpenClose
适配器模式(AdapterPattern): 将某个类的接口转换成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。如读卡器是作为内存卡和笔记本之间的适配器,需要将内存卡插入读卡器,再将读卡器插入笔记本,这样笔记本就可以读取内存卡了。 适配器模式的主要角色: 1、目标接口(Target)
没有什么设计模式是完美无缺的,一个设计模式就是解决一类的问题,通常设计模式在解决一类问题的同时,还会带来别的问题,我们设计者要做的事,就是扬长避短。 1、创建型设计模式,5个===》关注对象的创建 2、结构型设计模式,7个===》关注类与类之间的关系 3、行为设计模式,11个====》关注对象和行为的分离 设计模式六大原则:单一职责、里氏
单例模式的好处: 单例模式的好处就是单例,就是全局唯一的一个实例,应对一些特殊情况,比如数据库连接池(内置了资源)全局唯一奥玛生成器,单例可以避免重复创建,但是也会常驻内存,除非真的有必要,否则不要用单例模式。 单例模式: 1、构造函数私有化,避免别人还去new 2、公开的静态方法提供对象实例 3、初始化一个静态
单例的基础上升级了一下,把对象从内存层面复制了一下,然后返回。是个新对象,但是又不是new出来的。 ///<summary> ///原型模式:单例的基础上升级了一下,把对象从内存层面复制了一下,然后返回 ///是个新对象,但是又不是new出来的 ///</summary> publicclassPrototype { ///<summary> ///构造函数耗时耗资源
抽象工厂:创建对象,创建一组密不可分的对象 创建产品簇,多个对象是个整体,不可分割 工厂+约束 倾斜的可扩展性设计,增加产品很麻烦 ///<summary> ///一个工厂负责一些产品的创建 ///产品簇 ///单一职责就是创建完整的产品簇 /// ///继承抽象类后,必须显式的override父类的抽象方法 ///</summary> publicabstra
适配器模式:解决重构的问题,新东西和旧系统不吻合,通过组合/继承进行配 适配器:插座,电源适配器,做个转接的 程序员已经确定好规范IHelper,新增了一个RedisHelper----第三方,二者规范不一致,就是没实现接口 ///<summary> ///数据访问接口 ///</summary> publicinterfaceIHelper { voidAdd<T>();
通过代理完成对业务类的访问,包一层方便人以功能扩展。 代理模式:VPN代理,翻墙代理,火车票代理等。 通过代理业务类去完成对真实业务类的调用,代理类不能扩展业务功能,在不修改RealSubject前提下,插入功能。 包一层:没有什么技术问题是包一层解决不了的,如果有,那么就再包一层。比如来个日志记录,可以避免修改业务类,只需要修改代理类。在来个
一个对象的动作触发多个对象的行为,通过观察者可以去掉对象的依赖,支持各种自定义和扩展。 观察者模式,还要从那只申请的猫开始说起。 猫叫一声之后触发: BabyCry()、BrotherTrun()、DogWang()、FatherRoar()、MothorWhisper()、MouseRun()、NeighbourAwake()、StealerHide()....... 下面代码是这些触发类: publicclassBaby {&
责任链设计模式,是行为型设计模式的巅峰之作。 现在有一个场景,请假申请。请假时间的长短,需要不同级别的领导才能审批。 万物皆对象嘛,请假需要工号、姓名、原因、时长、结果等等,那我们来定义一个请假的类。其实其就是一个上下文环境(Context),保存业务处理中参数-----中间结果-----最终结果。行为型设计模式重用的标配,把行为转移。 publiccla
代理模式(Proxy): 代理模式就是给某一个对象提供一个代理,并由代理对象控制对原有对象的引用。在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。例如windows桌面端的快捷方式就是一个代理。 代理模式按照使用目的可以分为: 1)远程代理:为一个位于不同的地址空间的对象提供一个
桥接模式(Bridge): 桥接是用于把抽象化与实现化解耦,使得两者可以独立变化。 桥接模式的角色: 1)抽象化角色(Abstraction):它是用于定义抽象接口,通常是抽象类而不是接口,其中定义了一个Implementor(实现接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系。 2)改善后的抽象化角色(RefinedAbstraction):通常是具
装饰者模式(wrapper): 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。 示例:英雄学习技能 1publicclassProgram 2{ 3privatestaticvoidMain(string[]args) 4{ 5//选择英雄 6He
前言 我们学习了解完了创建型设计模式和结构型设计模式,今天我们开始学习并了解行为型设计模式。今天我们首先来看这么一个设计模式——模板方法模式。这个模式我们在平常开发中总会不自觉的使用到。就像我们平时一样的各种网站模板、建立模板、PPT模板等等。啥意思呢?简单,也就是把共同的东西拿出来,你需要具体去实现你自己的那么就另外加上自己的
设计模式-七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个接口只负责一件事情,只能有一个原因导致类变化 接口隔离原则:使用多个专门的接口,而不是使用一个总接口 迪米特法则(最少知道原则):只和朋友交流(成
今天,有什么经验需要分享呢?
立即撰写