设计模式
kikajack
这个作者很懒,什么都没留下…
展开
-
设计模式 - 享元模式 Flyweight
类似单例模式,享元模式也是通过共享对象来提高性能。区别在于:单例模式只保存一个对象的实例,例如客户端的数据库连接对象。享元模式保存一类对象的实例,例如服务端的线程池、连接池等。Golang 示例package mainimport ( "fmt")type Connect struct { name string}func NewConnect(name string) *Connect { return &Connect{name}}type ConnectFa原创 2020-08-05 13:17:40 · 203 阅读 · 0 评论 -
设计模式 - 单例模式
简介场景系统中,某些类只能有一个实例(例如文件系统管理器、系统计时工具),且需要在系统的任何地方都可以访问到。这时,可以让类自身以静态属性的方式保存其唯一实例,并私有化构造方法,通过指定的方法获取这个实例。模式定义单例模式:确保某个类只有一个实例,而且由这个类负责自身的实例化并保存这个实例。模式特点符合单例模式的类有如下特点:只能有一个实例,保存在自身的静态私...原创 2018-07-07 10:42:17 · 422 阅读 · 0 评论 -
GOF 23种设计模式
分类创建型设计模式 Creational Pattern结构型设计模式 Structural Pattern行为型设计模式分析单例模式 设计模式 Java 版 图说设计模式设计模式,就是对软件设计中各种常见场景的编码套路。套路知道的多了,代码就敲的轻松。分类创建型设计模式 Creational Pattern创建型设计模式描述了如何创建类,对...原创 2018-07-07 09:34:10 · 940 阅读 · 0 评论 -
设计模式 - 装饰器模式(Decorator)
简介场景通过继承和关联都可以给对象增加行为,区别如下:继承是静态的(无法在程序运行时动态扩展),且作用于所有子类。硬编码,高耦合。通过装饰器可以在运行时添加行为和属性到指定对象。关联关系就是在一个类中嵌入另一个类的对象,被嵌入的对象就是装饰器。可以动态决定是否调用这个内嵌对象,低耦合。模式定义装饰模式:动态地给指定对象增加额外职责。装饰模式对客户透明,可以嵌套执行多次...原创 2018-07-05 23:23:22 · 140 阅读 · 0 评论 -
设计模式 - 门面模式(Facade Pattern,也叫外观模式)
简介场景将系统划分为若干个子系统有利于降低系统的复杂性,但是这会增加调用者的复杂性。通过引入 Facade 可以对调用者屏蔽系统内部子系统的细节。电商企业电商企业有订单部门、物流部门、结算部门。当消费者打客服电话时,只跟客服代表通话,客服代表充当 Facade,代替客户获取相关子部门的信息。分层的系统对于复杂系统,分层设计可以提高灵活性和可替换性。可以用外观...原创 2018-07-17 19:01:10 · 209 阅读 · 0 评论 -
设计模式 - 组合模式(Composite Pattern)
参考:http://terrylee.cnblogs.com/archive/2006/03/11/347919.html简介树状结构中,对于枝节点和叶节点,接口不同,客户端需要判断处理的节点类型。场景对于规模比较大的公司,其组织架构一般是:总公司,下面有分公司和直属部门(总公司的人事、财务、行政),分公司下面又有直属部门(分公司的人事、财务、行政)和支公司,支公司下面是各个部门。...原创 2018-07-17 18:22:11 · 595 阅读 · 0 评论 -
设计模式 - 桥接模式
简介场景绘制图形时,可以抽象出一个图形类。然后,增加新的需求,需要给绘制的图形添加颜色,此时系统引入了两个变化维度。有两种方案:每种图形提供一套颜色的实现(继承关系) 组合图形和颜色(关联关系) 对于第一个方案,类的数量会指数级增长,且类之间的继承导致强耦合。第二种方案更优。模式定义桥接模式(Bridge Pattern)将抽象部分与实现部分分离,使它们都...原创 2018-07-17 18:17:27 · 222 阅读 · 0 评论 -
设计模式 - 适配器模式
简介场景现实场景:国内电压是 220v,外国部分国家是 110v,如果去出差,会需要携带两个电源适配器,以应对这两种不同的电压。数据库场景:每种编程语言都需要支持多种数据库,通常会抽象一层数据库连接层,例如 Java 的 JDBC,PHP 的 PDO。数据库连接层对应用开发人员提供标准接口,屏蔽了数据库底层的差异。数据库提供的接口则是千差万别的。所以,数据库连接层又拆分为两层,一层...原创 2018-07-16 18:54:44 · 195 阅读 · 0 评论 -
面向对象的三大特性和五大设计原则
特性封装继承多态设计原则单一职责原则开放封闭原则里式替换原则接口隔离原则依赖倒置原则面向对象的 SOLID 原则特性封装隐藏对象的属性和实现细节,通过对外暴露的接口控制程序中属性的读写。封装需要把所有属性私有化,对每个属性提供 getter 和 setter 方法。如果有一个带参的构造函数的话,还需要写一个不带参的构造函数。继承...原创 2018-06-27 18:43:42 · 793 阅读 · 0 评论 -
UML 类图快速入门
UML 图形官方定义UML 类图(Class Diagram)UML 时序图(Sequence Diagram)领域 UML 类图和实现 UML 类图领域 UML 类图实现 UML 类图UML 关系泛化关系(generalization)实现关系(realize)关联关系(association)依赖关系(dependency)组合关系(compositio...原创 2018-06-27 18:06:05 · 1121 阅读 · 0 评论 -
设计模式 - 观察者模式
简介场景如果想实时跟踪某个对象的状态(例如,对于负责下载的对象,想实时跟踪下载进度),有两种方法:定时轮询:定时访问目标对象的接口,获取其当前状态主动通知:在目标对象发生变化时,主动通知需要知道这个变化的对象模式定义观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得当一个对象状态发生改变时,所有依赖它的对象将自动得到通知和更新。观...原创 2018-07-02 22:31:29 · 136 阅读 · 0 评论 -
设计模式 - 建造者模式 Builder Pattern
简介场景在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们。模式定义建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。模式特点建造者模式包含四个角色:Builder:抽象建造者ConcreteBuilder:具体建造者Director:指挥者Product:产品角色...原创 2018-07-08 22:22:10 · 218 阅读 · 0 评论 -
设计模式 - 策略模式(strategy pattern)
简介场景某个功能需要从多种算法中根据条件选择一种时,有两个方案:将所有算法硬编码到代码中,然后通过条件语句进行选择使用策略模式使系统可以灵活地选择算法,并可以灵活添加新算法模式定义定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。每个封装不同算法的类称为策略(Strategy)类。模式特点策略模式包含三个角色:Context:环境类Str...原创 2018-07-01 21:51:17 · 349 阅读 · 0 评论 -
设计模式 - 抽象工厂模式
简介产品等级结构和产品族产品等级结构 :产品的继承结构。对于电视机,有海尔、海信、TCL 等品牌,抽象电视机与具体品牌的电视机之间构成了一个产品等级结构。产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔工厂生产的电视机、电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。工厂方法模式中,一个具体工厂...原创 2018-07-01 20:34:39 · 162 阅读 · 0 评论 -
设计模式 - 工厂方法模式
简介模式定义在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。工厂方法模式让类的实例化延迟到子类中。模式特点工厂方法模式包含四个角色:Product:抽象产品ConcreteProduct:具体产品Factory:抽象工厂ConcreteFactory:具体工厂优缺点克服了简单工厂的缺点,符合开放封闭原则。...原创 2018-07-01 19:49:32 · 204 阅读 · 0 评论 -
设计模式 - 简单工厂模式
简介模式定义简单工厂模式(Simple Factory):根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类,用来创建其他类的实例,被创建的实例通常都具有共同的父类。模式特点简单工厂模式包含三个角色:Factory:工厂,负责实现创建所有实例Product:抽象产品,是所创建的所有对象的父类,负责描述所有实例所共有的公共接口ConcreteProduct:具体产品...原创 2018-07-01 16:29:11 · 137 阅读 · 0 评论 -
设计模式 - 模板方法设计模式
模板方法及各种语言的实现 定义:模板方法定义了一个操作中算法的骨架,而将一些步骤延迟到子类中。子类可以复用算法的结构,同时可用重写算法的某些特定步骤。简介模板方法(Template Method)设计模式中,通过模板方法定义算法的完整流程和用到的所有具体方法。子类可以重写部分具体方法,而不需要修改流程。例如,程序框架定义了稳定的算法流程 run(),且在其依赖的三个方法中...原创 2018-07-01 14:52:02 · 155 阅读 · 0 评论