C++笔记(五) UML/设计模式(简单工厂模式及工厂模式)

一、UML(统一建模语言)

  1. 模型:对问题的书面上的无歧义文字或图形的描述,简言之,模型是对现实的简化。
  2. 建模:对现实系统进行适当的过滤,用适当的表现规则描述出简介的模型问题。
  3. UML:是一种基于面向对象的可视化建模语言。UML采用了一组形象画的额图形符号作为建模语言,使用这些符号可以形象的描述系统的各个方面。UML通过建立图形之间的各种关系来描述模型。
  4. UML建模工具:Rose,用的比较少;用例图,常用
  5. 用例图:也称为用户模型图,是从软件需求分析到最终实现的第一步,他是从客户的角度来描述系统功能。包含三个基本组件:参与者(Actor)、用例(use case)、关系。参与者:与系统打交道的人或者其他系统,即使用该系统的人或事物;用例:代表系统的某香港完整的功能;关系:定义用例之间的关系;

 

二、设计模式

 程序的并发执行往往带来与时间有关的错误,甚至引发灾难性的后果。这需要
引入同步机制。使用多进程与多线程时,有时需要协同两种或多种动作,此过程就
称同步(Synchronization)。引入同步机制的第一个原因是为了控制线程之间的资源
同步访问,因为多个线程在共享资源时如果发生访问冲突通常会带来不正确的后果。
例如,一个线程正在更新一个结构,同时另一个线程正试图读取同一个结构。结果,
我们将无法得知所读取的数据是新的还是旧的,或者是二者的混合。第二个原因是
有时要求确保线程之间的动作以指定的次序发生,如一个线程需要等待由另外一个
线程所引起的事件。
为了在多线程程序中解决同步问题,Windows提供了四种主要的同步对象,
每种对象相对于线程有两种状态——信号状态(signal state)和非信号状态(nonsignal
state)。当相关联的同步对象处于信号状态时,线程可以执行(访问共享资源),反
之必须等待。这四种同步对象是:
(1)事件对象(Event)。事件对象作为标志在线程间传递信号。一个或多个线
程可等待一个事件对象,当指定的事件发生时,事件对象通知等待线程可以开始执
行。它有两种类型:自动重置(auto-reset)事件和手动重置(manual-reset)事件。
(2)临界区(Critical Section)。临界区对象通过提供一个进程内所有线程必须
共享的对象来控制线程。只有拥有那个对象的线程可以访问保护资源。在另一个线
程可以访问该资源之前,前一个线程必须释放临界区对象,以便新的线程可以索取
对象的访问权。
(3)互斥量(Mutex Semaphore)。互斥量的工作方式非常类似于临界区,只是
互斥量不仅保护一个进程内为多个线程使用的共享资源,而且还可以保护系统中两
个或多个进程之间的的共享资源。
(4)信号量(Semaphore)。信号量可以允许一个或有限个线程访问共享资源。
它是通过计数器来实现的,初始化时赋予计数器以可用资源数,当将信号量提供给
一个线程时,计数器的值减1,当一个线程释放它时,计数器值加1。当计数器值小
于等于0时,相应线程必须等待。信号量是Windows98同步系统的核心。从本质上
讲,互斥量是信号量的一种特殊形式。
Windows/NT还提供了另外一种Windows95没有的同步对象:可等待定时器
(Waitable Timer)。它可以封锁线程的执行,直到到达某一具体时间。这可以用于
后台任务。

 

 

  1. 懒汉式和饿汉式
    #include <iostream>
    using namespace std;
    
    class Singleton
    {
    private:
    	Singleton()
    	{
    		cout << "Singleton 构造函数执行" << endl;
    	}
    public :
    	static Singleton *getInstance()
    	{
    
    		/*懒汉式
    		if (m_psl == NULL)
    		{
    			m_psl = new Singleton;
    		}
    		*/
    		return m_psl;
    	}
    	static void freeInstance()
    	{
    		if (m_psl != NULL)
    		{
    			delete m_psl;
    			m_psl = NULL;
    
    		}
    	}
    private :
    	static Singleton *m_psl;
    };
    //饿汉式
    Singleton *Singleton::m_psl = new Singleton;
    
    //懒汉式:非线程安全;只有在调用的时候才new
    //饿汉式:县城安全,,做一个全局变量static,系统一启动就new实例
    void  main()
    {
    	//懒汉式
    	Singleton *p1 = Singleton::getInstance();
    	//饿汉式
    	//Singleton::m_psl;
    	system("pause");
    	return ;
    }
  2. 程序并发机制扩展:

程序的并发执行往往带来与时间有关的错误,甚至引发灾难性的后果。这需要
引入同步机制。使用多进程与多线程时,有时需要协同两种或多种动作,此过程就
称同步(Synchronization)。引入同步机制的第一个原因是为了控制线程之间的资源
同步访问,因为多个线程在共享资源时如果发生访问冲突通常会带来不正确的后果。
例如,一个线程正在更新一个结构,同时另一个线程正试图读取同一个结构。结果,
我们将无法得知所读取的数据是新的还是旧的,或者是二者的混合。第二个原因是
有时要求确保线程之间的动作以指定的次序发生,如一个线程需要等待由另外一个
线程所引起的事件。
为了在多线程程序中解决同步问题,Windows提供了四种主要的同步对象,
每种对象相对于线程有两种状态——信号状态(signal state)和非信号状态(nonsignal
state)。当相关联的同步对象处于信号状态时,线程可以执行(访问共享资源),反
之必须等待。这四种同步对象是:
(1)事件对象(Event)。事件对象作为标志在线程间传递信号。一个或多个线
程可等待一个事件对象,当指定的事件发生时,事件对象通知等待线程可以开始执
行。它有两种类型:自动重置(auto-reset)事件和手动重置(manual-reset)事件。
(2)临界区(Critical Section)。临界区对象通过提供一个进程内所有线程必须
共享的对象来控制线程。只有拥有那个对象的线程可以访问保护资源。在另一个线
程可以访问该资源之前,前一个线程必须释放临界区对象,以便新的线程可以索取
对象的访问权。
(3)互斥量(Mutex Semaphore)。互斥量的工作方式非常类似于临界区,只是
互斥量不仅保护一个进程内为多个线程使用的共享资源,而且还可以保护系统中两
个或多个进程之间的的共享资源。
(4)信号量(Semaphore)。信号量可以允许一个或有限个线程访问共享资源。
它是通过计数器来实现的,初始化时赋予计数器以可用资源数,当将信号量提供给
一个线程时,计数器的值减1,当一个线程释放它时,计数器值加1。当计数器值小
于等于0时,相应线程必须等待。信号量是Windows98同步系统的核心。从本质上
讲,互斥量是信号量的一种特殊形式。
Windows/NT还提供了另外一种Windows95没有的同步对象:可等待定时器
(Waitable Timer)。它可以封锁线程的执行,直到到达某一具体时间。这可以用于
后台任务。

 

 

调用方法 

 

 

  1. 简单工厂模式---》在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。
  2. 工厂模式:--->

    工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。

    核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

抽象工厂(Creator)角色

工厂方法模式的核心,任何工厂类都必须实现这个接口。

具体工厂( Concrete  Creator)角色

具体工厂类是抽象工厂的一个实现,负责实例化产品对象。

抽象(Product)角色     

工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色

工厂方法模式所创建的具体实例对象

 

 

调用方法及调价新类 

 

  1.  
  2.  
  3.  

  4.  

 

  1.    
  2.  

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值