赞
踩
思维
原则
模式
模式一 观察者模式
适用场景:一对多;(例如: 控制多个屏幕显示气象信息)
内容:控制者类中,存在一个list<oberver>容器,当消息改变时,直接遍历整个list进行广播即可。
模式二:适配器模式
适用场景: 在原有代码基础上包一层,将接口改成自己想要的形式,统一接口(例如:当不同屏幕厂商第三方API接口不统一时)
内容:对象形,即在adapter类中new 一个原始类的对象,函数实现借助这个对象进行。
模式三:职责链模式
适用场景:对于一个数据,按顺序经过多个处理单元时。例如:污水处理过程
内容:处理单元就可以提取成单独的类,且包含一个成员变量--处理单元。这样就连接在一起。
模式四:简单工厂模式:只有一个工厂,生产多个产品,内部用if else 来判断
模式五:工厂方法模式:每个工厂对应一种产品
模式六:抽象工厂模式:一个工厂可能对象多种产品;
以上三者通常使用的是工厂方法模式,三者的核心思想都是:
创建和使用分离。
有必要吗?有!如果创建对象时,还伴随着复杂的初始化、配置等操作,如果有1000处创建对象,则需要重复1000次。造成代码冗余,而且代码变更时也需要修改1000个位置。
工厂方法就是将创建对象的操作封装。
模式七:外观者模式Facade
使用场景:当客户需要的一个操作会涉及到ABC多个模块时,将所有的ABC模块操作封装成一个接口,便于使用。例如:前台,10086号码 等等
模式七:适配器模式
使用场景:在原有代码基础上进行修改时,为了不改动原有代码;
还可以使用:继承; 将要改动的操作封装成一个函数,加入到原有代码中。
模式八:代理模式
使用场景:需要在旧代码基础上扩展时,保证不改动旧代码;被代理类的功能有扩展或者阉割时
举例:中介就是一个典型的代理类。
业主:房子面积,户型,报价,底价;身份证,房产本;
中介:
客户:
功能阉割:即中介可以把房子面积等信息告诉客户,但是,底价是不可以轻易告诉客户的,必须判断客户有足够诚意购买时才可以告诉。
功能扩展:现在房子成交了,但是业主不会办理过户手续。中介可以拿到业主的房产本等信息代为办理。
代理模式和适配器模式的区别:
https://blog.csdn.net/hp_cpp/article/details/105185020
相同点:代理类和适配器类都包含一个被代理类或被适配类的实例
不同点:适配器类的接口和被适配器接口不同,但是功能相同;代理类和被代理类的接口相同,但是功能有阉割或者扩展;
为什么要使用代理模式:
以上,很常用的场景是在别人旧代码上进行扩展时,使用代理模式可以不更改原有代码。
代理模式和适配器模式的问题:需要把被代理类或被适配类所有的函数都实现一遍。
模式九:组合模式
使用场景:树状结构,例如:文件夹系统;四则运算
内容:以文件系统为例。定义一个父类file, 有两个子类:文件夹,文件。分别对应树中的节点和叶子节点。且文件夹类中包含一个容器,容器中是file类型的元素(可以是文件夹也可以是文件)。求大小函数:文件夹类中,是遍历file类型元素的容器,依次直行其求大小函数,并将结果累加;文件类中,直接返回文件大小即可。
四则运算同理,运算符号和数字分别是节点和叶子节点。只不过,运算符号不再含有容器了,而是根据容器中元素数量不同即几元运算符,构建不同的子类。运算符号和数字类都包含两个函数:tostring 和 value .
组合模式和职责链模式的区别:职责链模式中,不同处理单元只是具体的业务内容不同,其主体流程都一致。因此存在一个单元父类,和多个单元子类。模板模式。单元父类中包含一个属性,即一个单元父类的实例。以此来构成链。
组合模式是树状结构,一个节点可能有3,4,5... 个子节点。职责链模式是链式结果,一个单元只有一个子单元。
模式十、单利模式
使用场景:只需要创建一个实例;
方法一:多线程不安全
方法二:多线程安全,但是提前创建对象,浪费空间
方法三:线程安全,最佳选择
注意:注意多线程时,单例模式的写法;避免多个线程创建多个实例;
“单例模式的懒汉式创建多个对象的原因:
假如第一个线程进入if (testSingleton==null) {....}内部还未创建对象的时候被第二个线程抢占资源,然后第二个线程也进入了if (testSingleton==null) {....}内部,然后两个线程分别创建了一个对象,导致懒汉式的加载在多线程的应用场景会出现创建多个对象的情况。” 参考:https://blog.csdn.net/qq_40389276/article/details/100594225
模式十一、策略模式
内容:A类中包含两个属性B类和C类。然后B类派生一些子类,C类派生一些子类。避免了模板模式的类爆炸。组合优于继承。将变化分离。单一原则。蜡笔和油笔的例子。
模式十二、模板模式
内容:主流程确定,某些细节不同。父类确定流程,子类实现细节。容易类爆炸。
案例
案例1:Log
目的:电脑主板,可插拔;
重点:明确行为和数据统一,告诉而不是ask,oo 思想;--- 将输出格式和是否输出的判断filter 都放到 目的地类之中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。