
设计模式
文章平均质量分 73
CRongQ
不忘初心,脚踏实地!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式(三)-结构型模式(6)-享元模式
享元对象是有了,但是我们编程中,起码也要保证唯一标识的半径值,是不能因为程序的变化而变化吧,即对象的外部不能对半径进行修改。这时候就有了外部状态和内部状态的区别。原创 2023-12-22 16:01:10 · 1343 阅读 · 0 评论 -
设计模式(三)-结构型模式(5)-外观模式
然后每个子系统所实现的功能,就由一个称为外观的高层功能模块来调用。该模式在开发时常常被使用过,所以很容易理解,就不多说了。某个功能模块存在多个子系统时,每个子系统实现各自的子任务,并且将它们组合在一起来完成一个完整的任务。实现一个登录帐户的功能,登录分为验证码验证、连接服务器、从数据库匹配帐户和密码的三个主要步骤。SubSystem(子系统类):实现子系统的功能。可以被外观类调用,也可以直接被客户端调用。Facade(外观类):为子任务提供一个共同对外的高层接口。在客户端调用它的方法。原创 2023-12-19 22:06:14 · 1012 阅读 · 0 评论 -
设计模式(三)-结构型模式(4)-组合模式
比如在文件管理系统中,所有文件和文件夹形成树状结构,文件夹目录里存在子文件夹和文件。枝结点有下一个层级,所以可以对其子结点的对象进行移除或增加新对象的操作。组合对象的抽象接口(Component):定义组合对象的公共接口。(组合对象指的是所有结点。枝结点具体类(Composite):枝节点实现组合对象的抽象方法,并且有一个容器用来存储子结点。在代码设计中,有种情况是对象之间存在层次关系,即对象之间会存在父结点和子结点的关系。叶结点具体类(Leaf):叶结点实现组合对象的抽象方法,但没有子结点。原创 2023-12-19 12:45:08 · 785 阅读 · 0 评论 -
设计模式(三)-结构型模式(3)-装饰模式
用户可勾选使用特效功能,弹出时会有抖动的效果。(这里的用户可分为使用红包的用户,和调用红包生成器底层库接口的程序员)2、原创 2023-12-18 13:54:51 · 1124 阅读 · 0 评论 -
设计模式(三)-结构型模式(2)-桥接模式
根据设计原则中的单一职责原则:各自模块应当保持各自的分工任务。比如在画图系统中存在形状和画笔的两个维度。形状负责的是它的模样(矩形、圆形、三角形等),而画笔负责的是铅笔、毛笔、圆珠笔之类的选型。原创 2023-12-14 13:07:20 · 1053 阅读 · 0 评论 -
设计模式(三)-结构型模式(1)-适配器模式
在软件设计中,某个模块里有很多公用的功能接口,其中有些公用接口需要用到不同的类当中时,会出现接口不兼容的问题。因为这些不同的类对这个相同任务的接口,都有各自代码逻辑的要求。比如在文件操作的模块中,都有获取文件属性、读写文件操作等共同的功能接口。这就出现了一个问题:保存 txt 文件和保存图片虽然都是保存操作的任务,但是实现的代码逻辑并不相同。在迭代版本中,客户希望在保存文本文件功能的基础上,还想要增加对一个图片文件进行保存的功能。将一个类的接口转换成客户希望的另外一个接口,以解决接口不兼容的问题。原创 2023-12-13 11:14:00 · 1540 阅读 · 0 评论 -
设计模式(二)-创建者模式(5)-建造者模式
(为了方便理解,下面例子不写得过于复杂,就不使用 Graphics 和 Pen 的复杂方式绘图,而使用 Point 数组进行简单绘图)为了要使得复杂对象里的各个部分的独立性,以及将它们组合在一起的算法需要保持固定(不会轻易改变其算法逻辑),不会随着新需求改变从而改变原有的逻辑。此时就需要用建造者模式了。在软件系统中,会存在一个复杂的对象,复杂在于该对象包含了很多不同的功能模块。该对象里的各个部分都是按照一定的算法组合起来的。将一个复杂对象的构建和其各个部分之间分离,在同一个算法组合里可以创建出不同的对象。原创 2023-12-11 22:33:23 · 815 阅读 · 0 评论 -
设计模式(二)-创建者模式(4)-原型模式
用一个已经创建的实例作为原型,来创建一个与原型对象相同的新对象。原创 2023-11-20 17:15:28 · 431 阅读 · 0 评论 -
设计模式(二)-创建者模式(3)-抽象工厂模式
如果我们知道把所有产品(比如车)分为几个产品族(比如自行车族、汽车族),那么工厂子类就对应指定的产品族进行“批量”创建对象。在工厂模式中,我们需要定义多个继承于共同工厂抽象基类的工厂子类,这些子类负责创建一个对应的对象。不需要每次定义一个新的产品类时,就要扩展新的工厂子类。工厂子类提供一个产品族中多个对象的创建工作,客户端可以方便使用某个产品族中的对象。要增加一个新系列的某一产品,要定义产品抽象类、产品实现类,工厂抽象基类,工厂子类。继承某系列抽象基类,用以实现某系列里某产品的特征和行为的具体类。原创 2023-11-20 14:00:12 · 520 阅读 · 0 评论 -
设计模式(二)-创建者模式(2)-工厂模式
由于简单工厂模式存在一个缺点,如果工厂类创建的对象过多,使得代码变得越来越臃肿。这样导致工厂类难以扩展新实例,以及难以维护代码逻辑。于是在简单工厂模式的基础上,对工厂类进一步优化。解决了工厂类难以扩展和难以维护的问题。如果想要怎么样的的实例,就要扩展一个其对应的工厂子类就可以了。定义一个工厂抽象基类,让其子类自己决定实例化哪一个工厂类。每次扩展新的工厂子类,就会增加系统的复杂度。继承抽象基类,用以实现特征和行为的具体类。用以定义特征和行为的抽象接口。对对应的实现类进行实例化。提供一辆汽车和一辆自行车。原创 2023-11-19 17:28:51 · 430 阅读 · 1 评论 -
设计模式(二)-创建者模式(2-0)-简单工厂模式
客户端不需要关注创建实例的过程。于是需要通过工厂模式,要把创建对象过程和使用对象进行分离。所以客户端只要使用对象即可,而创建对象过程由一种类来负责,该类称为工厂类。由于创建实例的方式是在静态方法里实现的,所以简单工厂模式也称为静态工厂方法模式。创建一个工厂类,根据不同的参数来创建不同类的对象,并把该对象返回给共同的一个基类。创建对象时,客户端不需要处理整个创建逻辑的过程。只要输入参数就可生成对应的对象。1)如果工厂类存在代码逻辑的错误,一经修改后,整个系统都要受到影响。原创 2023-11-19 16:46:23 · 364 阅读 · 0 评论 -
设计模式(二)-创建者模式(1)-单例模式
在程序运行当中,我们只希望一个类只能创建一个对象,在多个地方可以公用这个唯一的对象。必须保证类只能创建一个对象。原创 2023-11-19 12:57:54 · 626 阅读 · 0 评论 -
设计模式(一)-简要概述(2)
部分总结内容以及对应设计模式的链接,待更新中。。。原创 2023-11-19 12:56:39 · 366 阅读 · 0 评论 -
设计模式(一)-设计原则(1)
但是 A 的部分成员都设置为私有,不能访问 A 类 的私有成员, B 类只能访问 A类的公有成员。而如果实例化一个动物鱼,则鱼不符合飞的行为特征,也就不满足统一性。在类里面,不仅要实现文件的下载上传,还对文件进行读写的功能等。比如模块 A 和模块 B 互相依赖,模块C和B互相依赖,而 C 跟 A 没有关系。根据以上ABC类描述的,数据分析师类作为 C 类,数据管理员类作为 B 类,顾客类作为 A 类。减少模块间的依赖,降低模块间的耦合性。A类依赖B类,当B类修改或消失时,对A类会影响很大。原创 2023-11-17 00:41:53 · 617 阅读 · 0 评论