设计模式
camellias_
这个作者很懒,什么都没留下…
展开
-
设计模式(十六)之抽象工厂模式
关于工厂模式,我们之前说过了工厂模式,简单工厂模式。这篇日志,我们来说一下抽象工厂模式,那么,何为抽象工厂模式呢?抽象工厂模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类下面我们来写一个简单的小例子,之后,我们再分析抽象工厂模式的优缺点及三种工厂模式各自的特点。以德国大众集团为例,他生产奥迪和大众汽车,其二者所使用的发动机和变速器都是截然不同的。那这样说来,实现这个例子。需要抽象工厂类:AbstractFactory.cs 含有发动机接口与变速器接口,返回其二者各自的对象原创 2020-08-21 16:45:29 · 145 阅读 · 0 评论 -
设计模式(十五)之观察者模式
观察者模式(Observer Pattern)是设计模式中行为模式的一种,它解决了上述具有一对多依赖关系的对象的重用问题。此模式的参与者分为两大类,一类是被观察的目标,另一类是观察该目标的观察者们。正因为该模式是基于“一对多”的关系,所以该模式一般是应用于由一个目标对象和N个观察者对象组成(当然也可以扩展为有多个目标对象,但我们现在只讨论前者)的场合。当目标对象的状态发生改变或做出某种行为时,正在观察该目标对象的观察者们将自动地、连锁地作出相应的响应行为。模式中具有的角色抽象主题(Subject):原创 2020-08-15 14:18:08 · 1581 阅读 · 0 评论 -
设计模式(十四)之建造者模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示使用角色:Builder(抽象建造者)ConcreteBuilder(具体建造者,可能有多个)Product(产品)Director(指挥者)建造者UML图:建造者模式精髓:建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度。建造者模式实现:我去饭店吃饭,饭店的招牌菜是西红柿炒鸡蛋,饭店很火,有多位厨师(建造者类),为原创 2020-08-02 14:47:00 · 149 阅读 · 0 评论 -
设计模式(十三)之外观模式
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。系统角色:1、外观角色(Facade)外观模式的核心,它被客户角色调用,它熟悉子系统的各项功能,可以在内部根据需求预定几种功能的组合;2、子系统角色(SubSystem)实现了子系统的功能,它内部可以有系统内的相互交互,也可以由供外界调用的接口。优点:1: 减少系统相互依赖。2:提高灵活性。3: 提高了安全性。缺点:1: 不符合开闭原则,如果要改东原创 2020-08-01 14:22:24 · 159 阅读 · 0 评论 -
设计模式(十二)迪米特原则(最少知识原则)
迪米特(最少知识)法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。根本思想是:强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。这个法则体现的是“高内聚,低耦合”的设计思想。举个例子:我刚到公司上班,电脑坏了,需要技术部派人来给我修电脑,我不需要认识来给我修电脑的人是谁,我只需要认识技术部门的主管,具体他拍谁来给我修电脑,那是他的事。我的目的是赶原创 2020-07-31 13:36:36 · 243 阅读 · 0 评论 -
设计模式(十一)之模板方法模式
**模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模板方法模式角色:1:抽象类角色(AbstractClass):定义一个模板方法(TemplateMethod),在该方法中包含着一个算法的骨架,具体的算法步骤是PrimitiveOperation1方法和PrimitiveOperation2方法,该抽象类的子类将重定义PrimitiveOperation1和PrimitiveOperation2操作。2:具原创 2020-07-25 09:07:19 · 161 阅读 · 0 评论 -
设计模式(十)之原型模式
原型模式:就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。原型模式中的角色:抽象原型类(Abstract Prototype):提供一个克隆接口具体原型类(Concrete Prototype): 及实现了克隆接口的具体原型类原型模式的必要条件:重写抽象类中的Clone方法或者重写ICloneable中的Clone方法。也就是说:要实现克隆的这个类,必须实现其Clone方法。废话不多说:上例子,我这里参考《大话设计模式》中简历的例子:首先,正常来实现:简历类:Resu原创 2020-06-15 19:46:06 · 169 阅读 · 0 评论 -
设计模式(九)之工厂模式
工厂模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。之前我们看过简单工厂类,使用的是计算器作为例子。代码如下:简单工厂类Factory.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Thr...原创 2020-04-30 16:50:01 · 146 阅读 · 0 评论 -
设计模式(八)之静态代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。其通用设计图如下图所示:精髓是RealSubject类和Proxy类都实现Subject,使用Proxy类来限制对RealSubject类的访问Subject抽象主题类: 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求RealSubject具体角色:也叫做被委托角色,被代理角色。是业务逻辑的具体执行者。P...原创 2020-04-17 00:47:43 · 233 阅读 · 0 评论 -
设计模式(七)之装饰模式
装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。下图为其结构图:四个主要角色分别为:抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。具体构件(ConCreteComponent)角色:定义一个将要接受附加责任的类。装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口...原创 2020-03-23 22:55:30 · 195 阅读 · 0 评论 -
设计模式(六)之里氏替换原则
里氏替换原则,为继承定义规范。里氏替换原则有如下特点:代码共享,减少创建类的工作量提高代码的重用性提高代码的可扩展性提高产品代码的开放性继承侵入性 只要继承,必须拥有父类的内容降低代码的灵活性,子类必须拥有父类的属性和方法增强耦合性。里氏替换原则:有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原功能P1与新功能P2组成。新功能P由类A的子类B来完...原创 2020-03-15 15:05:34 · 115 阅读 · 0 评论 -
设计模式(五)之依赖倒转原则
依赖倒置原则的包含如下的三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象就是面向接口编程,采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。举个例子,小明开奔驰车。我们需要两个底层模块,司机类,奔驰车类。以及调用其二者的高层模块正常来写是这样子的:Pro...原创 2020-03-05 21:37:49 · 186 阅读 · 0 评论 -
设计模式(四)之开放封闭原则
开放封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。也就是如果需求发生变化导致程序中多个依赖模块都发生了级联的改动,就说明这个程序是有问题的,程序变得相对脆弱、无法重用。开放封闭原则就相对的解决了这个问题,它强调的是你设计的模块应该从不改变(绝对不改变是不可能的,只能相对少改动)。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的...原创 2020-02-27 13:40:08 · 493 阅读 · 0 评论 -
设计模式(三)之单一职责原则
单一职责原则:官方给的说法是:就一个类而言,应该仅有一个因其他变化的原因。说白了就是,一个类只负责一项职责。最简单也是最难的原则。难处在于对职责进行划分。单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。软件设计真正要做的内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的...原创 2020-02-21 13:37:15 · 520 阅读 · 0 评论 -
设计模式(二)之策略模式
策略模式:定义了算法家族,分别封装起来,让其之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。下边使用例子来具体分析:制作一个商场收银的软件,营业员根据客户购买的单价和数量,向客户收费。并附带打折的选项。效果如下图所示:主要部分代码:using System;using System.Windows.Forms; namespace strategy{ p...原创 2020-02-20 16:19:40 · 151 阅读 · 0 评论 -
设计模式(一)之简单工厂模式
简单工厂模式,他并不属于23种设计模式;它的实现和它的名字气质很符;就是简单;先来说下应用场景:当你不确定,有多少种操作的时候,例如:计算器中的 + - * /我们可以使用简单工厂模式。我们就以上边说过的加减乘除运算举例:建立一个控制台应用,输入两个数字和一个运算符,得到结果。不好的实例:我这里使用C#语言编写程序static void Main(string[] args) ...原创 2020-02-17 14:10:23 · 159 阅读 · 0 评论