展开

关键词

C++:Template Method

李建忠老师曾提过,重构获得(Refactoring to Patterns).的应用不宜先入为主,一上来就使用是对的最大误用,在敏捷软件开发中,提倡使用的是通过重构来获得 ( GoF) 所谓的骨架,要求是相对稳定的,在上面的例子中,如果step1,step3也是不稳定的,那么该情景下就不适用于适用,原因是软件体系中所有的东西都不稳定.的假条件是必须有一个稳定点 ,如果没有稳定点,那么没有任何作用.反过来说,如果所有的步骤都是稳定的,这种极端情况也不适用于适用.总是处理稳定中的变化这种情景.最大的作用,是在稳定与变化之间寻找隔离点 ,然后来分离它们,从而来管理变化.从而我们也能够得到启发,学会分析出软件体系结构中哪部分是稳定的,哪部分是变化的,是学好的关键点.再来看一看板方法的结构:其中TemplateMethod ,我们看不见框架的执行流程,执行细节是怎么样的,往往有一种只见树木不见森林的感觉.最后来总结以下板方法.Template Method是一种非常基础性的,它要解决的问题是如何在确定稳定操作结构的前提下

15530

C#总结

系列导航: C#(1)——单例 C#(2)——简单工厂 C#(3)——工厂方法 C#(4)——抽象工厂 C#(5)——建造者(Builder Pattern) C#(6)——原型(Prototype Pattern) C#(7)——适配器(Adapter Pattern) C#(8)——桥接(Bridge Pattern) C#(9)——装饰者(Decorator Pattern) C#(10)——组合(Composite Pattern) C#(11)——外观(Facade Pattern) C#(12)——享元(Flyweight Pattern) C#(13)——代理(Proxy Pattern) C#(14)——板方法(Template Pattern) C#(21)——责任链 C#(22)——访问者(Vistor Pattern) C#(23)——备忘录(Memento Pattern)二、 原则

65020
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年38元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ - 装饰

    装饰 装饰指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 --百度百科装饰者主要是为一个对象增加新的行为,效果与子类扩展父类类似,但实现方与继承不同,且更加灵活。装饰类图 image.pngComponet: 定义接口基类。 解决方案引入装饰,在原有的日志的接口上封装一层修饰代码。这样就无需修改原先的日志代码,同时保证了新需求的开发。 const char *msg){ 输出至终端 fprintf(stdout, %s, msg); 添加新职能 return CCustomLog::WriteLog(tag, msg);}总结装饰的实现方法 装饰只是改变其外表的部分,原本的功能还是保留的。在使用时,能够在不修改原有功能基础上,随意增加需要的功能。使用起来也比较灵活。缺点在于,装饰对初始化要求较为严格,且代码难以理解。

    3930

    C++ - 策略

    策略策略定义多种处理同一种场景的不同算法,这些算法可在不影响用户的情况下互相替换。场景应用场景某会员制商场有两种级别会员:银卡会员、黄金会员,分别享有9折、8折购物优惠。 时间推移,if会越来越多,导致分支变多,代码走向糊,影响代码维护。解决方案引入策略,将用户等级抽象,分别定义出用户所有的行为,不同等级的用户各自实现该等级应享有的权益。

    4020

    C++——状态

    状态总结 状态将一个对象在不同状态下的不同行为封装在一个个状态类中,通过置不同的状态对象可以让环境对象拥有不同的行为。 (2) 状态的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱,增加系统的难度。 状态具体应用 (1)电梯升降系统的: 存在打开、关闭、运行、停止状态。各个状态下将有不同的行为。例如:在运行状态下可以进行停止操作,但无法进行打开和关闭操作。 (3)酒店订房系统的:存在订房状态、入住状态、取消订状态、退房状态。各状态下对应有不同的行为。 (5)银行取款系统的:存在正常状态、透支状态、冻结状态。不同状态下将有不同行为。例如:冻结状态不能进行取款,而正常状态和透支状态可以进行取款操作。

    9030

    C++ - 状态

    状态允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 --百度百科简单地说,状态就是状态机。 总结状态的实现方法难度不大,主要是编程的思想的上升。将状态与需求绑定,不仅能够实现统一需求的不同响应方,还能实现某些状态下不响应指定需求。场景清晰,思路明确。 状态的使用,可以使关注点仅放在当前状态遇到需求产生的完整流程。无需考虑其他状态的影响。将需求与响应解耦,还能够实现通信管理。 例如,不同进程间的需求响应,可以将两者通信为不涉及业务的跨进程通信,从而实现通信代码的可复用。总的来说,状态是一种非常实用的。 不仅是从代码上还有思路上,减轻师对复杂业务的整理工作。相同的完美!

    12400

    C++ - 桥接

    桥接桥接是一种结构型,可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。简单的理解,就是将抽象部分与实现部分分离,实现解耦。 如果将手机抽象,可以得到如下类图:桥接如上是将各个品牌手机相同部分抽象出来,差异性的部分可在具体的子类中实现。因此也就能够实现具备王者荣耀和微信的不同品牌手机(Honor、Mate40)。 但是上述又暴露出如下问题:每增加一款手机,就要重新实现一个手机子类以及适应当前手机的各个APP。每个手机与其平台上的APP高度耦合。 这种还会导致APP与手机绑定,从而无法实现从某个手机卸载指定的APP。例:在Mate40手机卸载王者荣耀。 APP抽象此种与第一种存在相同的问题。将手机与APP分别抽象当回头再分析场景时,发现场景存在两个实例,手机和APP,且为“has a”的关系,即聚合。

    6110

    C++ - 单例

    单例(Singleton)介绍单例是创建型,即用于创建对象的。其能够保证当前系统仅存在一个实例,并提供获取该实例的接口供客户端使用。 当强行new操作时,编译报错)单例的实现较为简单,部分专家并不认为其是一种,而是一种编程技巧。意义既然存在单例,那么其存在的意义是什么呢?又或者说能解决什么问题? 假是一个很庞大的类,其创建和销毁对象就会耗时且浪费资源。若多个任务都这么使用,统起来也会是一笔没有必要的浪费。保证系统资源被统一管理。在系统资源共享的情况下,每个任务都可以随意使用当前 资源。 若对共享资源进行管理的单例类,所有的任务都只能通过单例类来访问共享资源。就可以实现此种需求。实现在上述介绍中,已经大致描述了单例的特点:创建唯一的实例 。 类图单例代码#include #include #include using namespace std; class CSingleton{public: ~CSingleton() {} static

    11230

    C++ - 原型

    原型(Prototype)原型是一种创建型,其功能为复制一个运行时的对象,包括对象各个成员当前的值。而代码又能保持独立性。 场景举例假这样一个场景,孙悟空出世,在花果山经历与猴孙的生死离别后,拜菩提老祖为师。历经多年,学的一身本领。此时的悟空拔出一个毫毛,变出一个自己。 如果不加,这些代码可能散落在客户端函数。假如过了十年继续施展分身,又需重新增加这些代码。日积月累,这些终将成为晦涩而又难以维护的“一坨”。 实现对于上述场景就有必要引入原型,原型也是比较简单的。只需要在类的时增加一个clone接口,用于返回当前对象this指针。 类图原型通过原型基类规范具备复制接口的子类实现。

    5230

    c#之单例

    c#之单例场景描述单例对于我们来说一点也不,是一个常见的名称,单例在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源单例无论是在实际开发中还是在软件应用中比较常见 ,比如,windows系统的任务管理器、IIS的HttpApplication、实际项目中的日志组件等等实现方   单例为了实现一个实例,那么只有不把实例创建暴露出去,只通过类本身来创建实例,为了实现效果 ,需要定义一个私有构造函数  单例实现方有:饿汉、懒汉、双重验证、静态内部类、延迟加载(Lazy)  下面分别对每一种实现方做一个简单的实例,以及其优缺点  饿汉 创建一个 Singleton ,在效率上和内存使用上都比较优秀 克服了饿汉的不足饿汉执行效率高,由于在类加载的时候初始化导致内存浪费 public class SingletonStatic { 内部类 public windows的任务管理器等2、IIS的HttpApplication,所有的HttpModule都共享一个HttpApplication实例在项目中的实际使用场景:1、日志组件2、多线程线程池管理3、网站数器

    40520

    C#之策略

    背景:  策略在我们实际项目开发中,使用的比较多的一种,直接贴一个demo处理供大家参考,如有不对的地方,多多指点交流 定义:  策略是针对一组算法,将每个算法封装到具有公共接口的独立的类中 策略使得算法可以在不影响到客户端的情况下发生变化。 System;using System.Configuration;using Unity; 定义:策略是针对一组算法,将每个算法封装到具有公共接口的独立的类中, 从而使它们可以相互替换。 策略使得算法可以在不影响到客户端的情况下发生变化。 结构:策略是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。 策略通常把一系列的算法包装到一系列的策略类里面。 ···避免使用多重条件选择语句,充分体现面向对象思想。  主要缺点: ··客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

    33650

    C++ - 观察者

    观察者观察者是一种行为,主要用于实现一种订阅机制,可在目标事件发生变化时告知所有观察此事件的对象,使观察者做出对应的动作。通常是通过调用各观察者所提供的方法来实现。 UML类图观察者CObserver类,为观察者抽象类,为具体观察者定义标准接口:Update() 用于更新自身行为,由具体主题调用。GetName用于获取定义的字符,用于标识各个对象。 场景列举如上场景,现某处无线电在特定频道发出广播,所有关注此频道备都会接收到此信号。 :手机、对讲机* 监听无线电的备: 对讲机 *class CInterphone : public CObserver{public: explicit CInterphone(string value 当系统中许多实例或组件需要关注同一个事件时,可采用观察者

    8730

    C#之订阅发布

    什么是Pub-Sub发布订阅是一种,它允许应用程序组件之间进行松散耦合。其实订阅发布中主要是发布者生成事件通道,用于在不了解任何订阅者存在的情况下通知订阅者。 Pub和Sub的使用首先我们看一个简单地订阅发布.定义一个Action委托,无返回值.namespace PubSubPattern{ public class Pub { public Action

    31410

    C#开启闯关之路

    (Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。是软件开发人员在软件开发过程中面临的一般问题的解决方案。 是一套被反复使用的、多数人知晓的、经过分类编目的、代码经验的总结。使用是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 也有讲到面向对象SOLID五大原则。今天我们也将开启的闯关之路。其中到底有没有联系呢?到底有没有关系呢?  事实上面向对象三大特性在一定程度上体现了面向对象的五大原则。 那么与又有什么关系呢。其实面向对象的五大原则也可称为五大原则。学习之前我们都得先了解其原则,学习其基础。在此基础之上学习才是最好的。   需要许多的实践。接下来的时间之中我们即将开启C#的闯关之路了。  生命不息、战斗不止!

    28952

    C#学习笔记-单例

    最近在学,学到创建型的时候,碰到单例(或叫单件),现在整理一下笔记。   (《-基于C#的工程化实现及扩展》,王翔)。也就是说,单例就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。   二、多线程下的单例  1、Lazypublic class Singleton{ private static Singleton instance; private static object lock(_lock) { if(instance==null) { instance=new Singleton(); } } } return instance; }}  上述代码使用了双重锁方较好地解决了多线程下的单例实现 2、饿汉  这种的特点是自己主动实例。

    18220

    C++笔记(01)-的介绍

    参考书籍:《:可复用面向对象软件的基础》参考课程:《C++》-李建忠“每一个描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 ▷底层思维:向下,如何把握机器底层从微观理解对象构造语言转换编译转换内存型运行机制▷抽象思维:向上,如何将我们周围的世界抽象为代码面向对象组件封装架构▷良好的底层思维需要做到:要深入的理解三大面向对象机制 3.软件复杂的根本原因:? 好的面向对象很不容易,因为软件是极其复杂的,需求时刻在改变,一个软件产品不可能一成不变,所以在前期的中,如果一个方法不合理,没有良好的扩展性和可维护性,那这个软件工程终究是失败的,后果就是产品不盈利 基于这个对象型来编程,这样就能够更好的应对变化,因为离开具体细节,抽象化,所以能够复用。5.软件的目标什么是好的软件?软件的金科玉律:          复用!

    25820

    浅谈Objective-C(Design Pattern)import Singleton.h

    为什么要用使代码编制真正工程化; 是软件工程的基石脉络,如同大厦的结构一样。遵循的原则: 1、一个类应该只有一个发生变化的原因。 1.创建型: 单例 抽象工厂2.结构型: MVC 型: 装饰器: 适配器:Category(类别)和Delegation(委托) 外观:外观针对复杂的子系统提供了单一的接口 组合:3.行为型: 责任链: 观察者:Notification(通知)机制 和 KVO机制 备忘录: 命令:: 实例方法,类方法,便利构造方法 extention 在Objective-C中实现单例: 1、如何保证类只创建一个实例?因为OC中所有方法都是共有的。 工厂总结:应用场景:1.在的初期,就考虑到产品在后期会进行大规扩展的情况下,应当使用工厂方法;2.产品结构较复杂的情况下,建议使用工厂方法;3.工厂方法适用于产品种类结构单一的场合

    38070

    学以致用C++ 之 “命令

    团队管理者前面说到我当程序员中介的经历,后来我就有点烦了,这客户有什么需求,都直接指名道姓找这个程序员那个程序员谈需求,我这会儿得给程序员A聊需求,过会儿得给程序员B聊需求,然后又得跟C说,跟D说,那怎么搞 接下来是负责UI的程序员A、负责后台的程序员B、负责需求分析的程序员C、D。 客户的需求,从直接传达到各个程序员,转移带传达给团队负责人,我,然后由我来统一调配。那我们来画一下类图:?

    26730

    学以致用C++ 之 “中介

    中介者又称“调停者”。 用一个中介对象封装一系列对象交互,中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以改变他们之间的交互。 应用场景优点减少了依赖,这里可能不是很触目惊心,看这篇:用C++跟你聊聊“中介者”,也是我的,看完你就知道什么叫触目惊心了。缺点中介者负荷过高。应用场景用于一堆乱麻的交互场景。 中介者简单,但是也容易误用,不要为了使用中介者而使用它。今天有点累,那个“原型”我就不写了,可以看我之前那篇就好。 下一篇:命令

    31930

    学以致用C++ 之 “代理

    但是,老板有一个要求,一切流程,必须按照他定下来的规则走,烤面包,必须以他的方来烤,烤肉,也必须以他的方来,奶油怎么挤、生菜要多大等等都必须按照他的来,以确保顾客吃了之后没有啥反感。 将这些因素用类图的形来表述就是如此: ?

    43730

    相关产品

    • 设计协作平台

      设计协作平台

      腾讯自研的产品设计研发一站式协作平台,支持在线导入预览Sketch设计稿、自动生成设计标注切图,灵活调用图标库、素材库,支持多种插件上传,让产品设计更轻松高效。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券