必威体育Betway必威体育官网
当前位置:首页 > IT技术

啃食c++(简单设计模式)

时间:2019-10-06 03:44:30来源:IT技术作者:seo实验室小编阅读:73次「手机版」
 

啃食

简单工厂模式

设计模式是多态的一种应用实例,简单工厂模式是有一个生产对象决定生产那一产品,例如接下来的例子中,将friut作为父类,其子类就是各种水果,在这里就创建了两个子类引入,然后将各种水果对象作为生产者garden的私有数据成员,通过出生产者来获取想要的水果类型。

#include<iOStream>
using namespace std;
enum{APPLE  = 0 ,GRAPES = 1};
class friut{
public :
    friut(){}
    virtual ~friut(){}
    virtual void plant(){} 
    virtual void grow(){}
    virtual void harvest() {}
};
class apple:public friut{
public:
    apple(){}
    ~apple() {}
    void plant(){
        cout<<"apple has been plant...."<<endl ;
    }
    void grow(){
        cout<<"apple is growing..."<<endl ;
    }
    void harvest(){
        cout<<"apple harvest!"<<endl ;
    }
};
class grapes:public friut{
public :
    grapes() {}
    ~grapes() {}
    void plant(){
        cout<<"grapes has been plant...."<<endl ;
    }
    void grow(){
        cout<<"grapes is growing..."<<endl ;
    }
    void harvest(){
        cout<<"grapes harvest!"<<endl ;
    }
};
//创建生产者的类
class garden{
public:
    garden(){}
    ~garden(){}
    //通过该方法实现不同水果的生产,并将该水果返回
    friut *getFriut(int fr){
        switch(fr){
            case APPLE:
              app = new apple;
                app->plant();
                app->grow();
                app->harvest();
                return app;
            case GRAPES:
                grps=new grapes ;
                grps->plant();
                grps->grow();
                grps->harvest();
                return grps ;
        }
    }
    //生产者当前能生存的水果种类
private:
    apple * app ;
    grapes * grps;
};
int main(){
    
    garden gd ;
    friut* app ;
    friut *grps ;
 //通过父类接收
    app= gd.getFriut(APPLE);
    grps=gd.getFriut(GRAPES);
//记得将申请的资源释放
    delete app ;
    delete grps;
    app = NULL ;
    grps = NULL;
}

运行截图:

在这里插入图片描述

单例模式

在学习java语言时,对单例模式有一个概念,但是也用java实现了一个简单的单例模式。单例模式自己对其理解就是,一个类只能产生一个对象,这种设计模式感觉用处挺大的,尤其在以后的面向对象的语言开发中,有写对象一个程序只能存在一个,这时就可以用这种设计模式来实现此功能。

对于c++单例设计模式,也时大同小异,在这里我将具体实现描述一下就行,以备以后复习所用。

#include<iostream>
#include<string>
using namespace std;
class single{
private:
    //单例创建一个,static关键字意味着这个对象之创建一次,作用域是整个类区
    static single *s ;
    //将单例构造函数设为私有
    single(){}
    ~single(){}
   // single& operator=(const single&){}
public:
//在公有方法区只留一个接口,供用户获得此单例,该方法为类方法,通过类名调用
    static single* getSingle(){
        if(s == NULL){
            s = new single;
            cout<<"single ton has been ..."<<endl;
        }
        return s ;
    }
    void dosomething(){
        cout<<"singleton singleton"<<endl ;
    }
    void deletemyself(){
        delete s;
        s = NULL;
        cout<<"the singleton has been destroy!"<<endl;
    }
};
//初始化单例指向NULL
single* single::s = NULL ;
int main(){
   
    single::getSingle()->dosomething();
    single::getSingle()->deletemyself();
}

在这里插入图片描述

感觉c++创建单例相比于java跟抽象一些,但都不是很难,以上创建单例的方法为c++中的懒汉单例模式,意思是只有在用时才创建该单例对象。还有一种时饿汉单例模式,即在用之前已经创建好了该单例。

只需上面的程序:在s初始化时直接new该类,外部调用get函数直接返回s即可。这就是饿汉模式。

好啦!!!对于c++总结告一段落,又要继续沉溺在c++中啦~~~

相关阅读

浅谈游戏《Cuphead茶杯头》

序言 在通关了蔚蓝和死亡细胞后,我又开始寻觅硬核困难游戏了,这次看到的是Cuphead茶杯头。去年就对这款游戏有所耳闻,各大b站游戏区u

WeChatPlugin for Mac(mac微信小助手) v1.7.5中文版

WeChatPlugin是mac上一款非常强大的微信插件,这款插件想必很多人都用过,其功能非常多,包括自动回复、消息防撤回、远程控制、微信多

TMAC

不止一次听不同人说我有点像TMAC。书豪说我打球像TMAC,今天下了好几场火箭队的比赛,仔细观摩一下,发现的确有点像,特别是后仰跳投的

NetCat简介

引言 在看一些博客之前,我一直纳闷NetCat是一只什么样的猫,居然可以被人称为瑞士军刀。莫非是一只来自瑞士的??于是,特意去网上查了查

C语言如何计算数组的长度

(1)借助sizeof()函数 :#include<stdio.h>int main(){ // 定义一个整型数组, 并进行初始化赋值9个数据 :  int arr[] = {1,2,3,4,

分享到:

栏目导航

推荐阅读

热门阅读