设计模式
文章平均质量分 74
对23种设计模式和6大设计原则的总结
子非鱼Swx
路漫漫其修远兮,吾将上下而求索...
展开
-
C++设计模式之单例模式
因为静态初始化在程序开始时,即类被加载时,进入主函数之前,由主线程以单线程方式完成了初始化,所以静态初始化实例保证了线程安全性,但需要提前占用系统资源。在性能要求比较高时,就可以使用这种方式,从而避免频繁的加锁和解锁造成的资源浪费。由此,就出现了饿汉单例模式。原创 2023-03-20 21:29:38 · 542 阅读 · 0 评论 -
C++设计模式之抽象工厂模式
抽象工厂模式的最大缺点就是产品族扩展非常困难,为什么这么说呢?我们以最开始的通用代码为例,如果要增加一个产品C,也就是说产品家族由原来的2个增加到3个,看看我们的程序有多大改动吧!抽象类AbstractCreator要增加一个方法createProductC(),然后两个实现类都要修改,想想看,这严重违反了开闭原则,而且我们一直说明抽象类和接口是一个契约。改变契约,所有与契约有关系的代码都要修改,那么这段代码叫什么?叫“有毒代码”,——只要与这段代码有关系,就可能产生侵害的危险!原创 2023-03-19 22:11:07 · 295 阅读 · 0 评论 -
C++设计模式之原型模式
举一个最简单的例子来说明原型模式:记得上小学的时候,老师把需要做的课外习题写到黑板上,而下面的我们都要把这些题抄写到自己的本子上,回家做好,第二天交上来,也就是每道题,全班50个人,每个人都要抄写一遍。按照现在的时间理论来说,就是浪费了50个人的时间。但是,那个时候条件限制,老师也是不得已而为之。现在好了,老师做一份电子版的习题,打印一份,然后拿着这份打印的原版,就可以复制出50份。原创 2023-03-17 11:09:39 · 294 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂模式:定义一个创建对象的工厂类,为每一种需要创建对象的类创建一个相应的具体工厂类来继承该工厂类,如有A类,B类,C类,那我们就创建3个具体工厂类继承工厂类分别用于创建A类对象、B类对象和C类对象。在客户端,根据逻辑判断出我们需要创建什么对象,先创建相应的工厂对象,然后通过相应的工厂对象调用其中的成员函数创建我们需要的对象,比如我们想要创建A类对象,就需要先创建相应的A类工厂对象,然后通过A类工厂对象调用其成员函数创建出A类对象。原创 2023-03-17 10:40:28 · 85 阅读 · 0 评论 -
设计模式之代理模式
我相信第一次接触到代理模式的读者肯定很郁闷,为什么要用代理呀?想想现实世界吧,打官司为什么要找个律师?因为你不想参与中间过程的是是非非,只要完成自己的答辩就成,其他的比如事前调查、事后追查都由律师来搞定,这就是为了减轻你的负担。原创 2023-03-17 10:38:16 · 90 阅读 · 0 评论 -
设计模式之装饰模式
当系统需要新功能的时候,是向旧系统的类中添加新代码,而不是更改已有代码,这符合开放封闭原则,而装饰模式可以很好的做到这一点,装饰模式是把类中的装饰功能从类中抽象出去,这样可以简化原有的类,有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。原创 2023-02-26 17:16:26 · 143 阅读 · 0 评论 -
依赖倒转原则和里氏代换原则详解
初学依赖倒转原则和里氏代换原则时,由于笔者水平有限,并没有看懂书上的专业术语的解释,经过反复摸索和学习,发现里氏代换原则和依赖倒转原则可以一言以蔽之:里氏代换原则:开发时以抽象为核心,针对抽象编程,能够抽象为一个抽象类或者接口的,就将其抽象为抽象类或者接口,然后用子类来进行实现。依赖倒转原则:将代码分为3层考虑,业务逻辑层,抽象层和实现层,其中业务逻辑层依赖抽象层,实现层也依赖抽象层。原创 2023-02-26 17:11:27 · 551 阅读 · 0 评论 -
开放-封闭原则
所谓开放-封闭原则就是指软件实体(类、函数、模块等)应该可以扩展,但是不可以修改,即我们设计这个类的时候就尽量让这个类足够好,写好了就不要去修改了,原来的代码能不动则不动,如果新需求来,我们增加一些类就完事了。==面对需求的改变,对程序的改动是通过增加新代码进行的,而不是更改现有的代码,这就是开放-封闭原则的精神所在。原创 2023-02-26 17:12:19 · 176 阅读 · 0 评论 -
单一职责原则
软件设计真正要做的许多内容就是发现职责,并把那些职责相互分离,其实要去判断是否应该分离出一个类来并不难,前面说过,一个类应该只有一个引起它变化的原因,如果你能想到其它的原因也能去改变这个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。原创 2023-03-13 16:32:11 · 419 阅读 · 0 评论 -
设计模式之策略模式
策略模式通常的使用方法就是一个抽象策略类,若干具体策略类和一个Context类,Conetext类中的接口会调用具体策略类的接口,可以让用户面对Context的接口编程,而不与策略类接口直接耦合 ,方便策略类日后更改接口。同时Conetext类可以结合工厂模式让用户与策略类完全解耦,比如可以向Context类传入参数而不是策略类,然后在Conext的构造函数里用工厂模式初始化策略类,甚至还可以什么都不传,定义一个默认策略供用户使用(简单工厂不一定是要一个单独的类)。原创 2023-02-26 17:13:20 · 296 阅读 · 0 评论 -
一道经典面试题透彻理解面向对象编程思想和简单工厂模式
本版本计算器代码虽然充分利用了面向对象的三大特性:封装、继承和多态,但是还是有点问题,因为最后判断到底实例化哪种运算符,是通过多个if语句判断的,这是一个典型的面向过程思想,而且该思想将界面逻辑和业务逻辑又混合了,所以我们在新版本的代码中要修改这种面向过程思想,这里我们可以利用一个设计模式,即简单工厂模式,其核心思想就是考虑用单独的类根据实际情况来创造不同类的实例。原创 2023-02-07 20:37:23 · 396 阅读 · 0 评论