【设计模式】单例模式、建造者模式、原型模式

高通camera:PDAF的配置与测试 确认相关log日志都已经打开了之后,判断是在3A算法中没有应用到PDAF,可能是之前在调试AF效果的时候关闭了PDAF,打开效果文件对应的文件夹,在\kamorta_lce_S5K3P9\Scenario.Default\XML\STATS。在log中搜索af_pdaf_proc_pd_single,这个函数是pdaf算法中的,源码被封装了,这里看不到,因此只能通过log打印出来的参数来分析pd是否正确,主要参数有pd ,defocus,confidence。PDAF的配置与测试。 阅读详情

1.单例模式

概念

Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。Singleton 模式就是一个类只创建一个唯一的对象,即一次创建多次使用。

实现步骤

  • 构造函数私有
  • 一个静态私有的当前类的指针
  • 一个静态公有的获取单例的方法
  • 分为饿汉式和懒汉式,前者是线程安全的,后者线程不安全,饿汉式在还没使用时就加载该单例对象,懒汉式等到首次使用时才加载该单例对象。

代码实现

#include<iostream>
using namespace std;

class SingletonLazy{
public:
	static SingletonLazy* getInstance(){
		if(pSingleton==NULL){
			pSingleton=new SingletonLazy();
		}
		return pSingleton;
	}
private:
	SingletonLazy(){
		cout<<"SingletonLazy"<<endl;
	}
	static SingletonLazy*pSingleton;
};

SingletonLazy* SingletonLazy::pSingleton=NULL;


class SingletonHungry{
public:
	static SingletonHungry* getInstance(){
		return pSingleton;
	}
private:
	SingletonHungry(){
		cout<<"SingletonHungry"<<endl;
	}
	static SingletonHungry* pSingleton;
};

SingletonHungry* SingletonHungry::pSingleton=new SingletonHungry();

int main(){
	SingletonLazy* sl=SingletonLazy::getInstance();
	SingletonHungry* sh=SingletonHungry::getInstance();
	return 0;
}

2.建造者模式

概念

当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。

请添加图片描述

角色

  • 一个抽象的建造者,是具体建造者的父类,提供产品各个构建步骤的实现方法。
  • 若干具体的建造者,在构造函数中申请对应的产品,提供对应产品的具体各个构建步骤的是方法。
  • 指导者,提供一个方法,在这个方法中以一个建造者作为参数,依次调用此建造者的各个建造步骤。关键在于它不直接返回对象而是一步步完成建造步骤。

代码实现

#include<iostream>
using namespace std;

class Car{
public:
	string GetEngine(){return m_engine;}
	string GetGearBox(){return m_gearbox;}
	string GetChassis(){return m_chassis;}

	void SetEnging(string engine){
		m_engine = engine;
		cout<<"created engine "<<m_engine<<endl;
	}
	void SetGearBox(string gearbox){
		m_gearbox = gearbox;
		cout<<"created gearbox "<<m_gearbox<<endl;
	}
	void SetChassis(string chassis){
		m_chassis = chassis;
		cout<<"created chassis "<<m_chassis<<endl;
	}
private:
	string m_engine;
	string m_gearbox;
	string m_chassis;
};

class BMWCar:public Car{
public:
	BMWCar(){
		cout<<"start building"<<endl;
	}

};

class BenzCar:public Car{
public:
	BenzCar(){
		cout<<"start building"<<endl;
	}
};

class CarBuilder{
public:
	CarBuilder(){
		cout<<"original carBuilder"<<endl;
	}
	virtual Car* BuildCar()=0;
	virtual void BuildEngine(){
		cout<<"orignal engine"<<endl;
	}
	virtual void BuildGearBox(){
		cout<<"orignal gearbox"<<endl;
	}
	virtual void BuildChassis(){
		cout<<"orignal chassis"<<endl;
	}

};

class BenzCarBuilder:public CarBuilder{
public:
	BenzCarBuilder(){
		cout<<"BenzCarBuilder"<<endl;
		m_car=new BenzCar();
	}
	void BuildEngine(){
		m_car->SetEnging("Benz Engine");
	}
	void BuildGearBox(){
		m_car->SetGearBox("Benz GearBox");
	}
	void BuildChassis(){
		m_car->SetChassis("Benz Chassis");
	}
	Car* BuildCar(){
		return m_car;
	}
private:
	Car* m_car;
};

class BMWCarBuilder:public CarBuilder{
public:
	BMWCarBuilder(){
		cout<<"BMWCarBuilder"<<endl;
		m_car=new BMWCar();
	}
	void BuildEngine(){
		m_car->SetEnging("BMW Engine");
	}
	void BuildGearBox(){
		m_car->SetGearBox("BMW GearBox");
	}
	void BuildChassis(){
		m_car->SetChassis("BMW Chassis");
	}
	Car* BuildCar(){
		return m_car;
	}
private:
	Car* m_car;
};


class CarDirector{
public:
	Car* ConstructCar(CarBuilder* carBuilder){
		carBuilder->BuildEngine();
		carBuilder->BuildGearBox();
		carBuilder->BuildChassis();
		cout<<"car build finished!"<<endl;
		return carBuilder->BuildCar(); 
	}
};

int main(){
	CarDirector* director=new CarDirector();
	Car* bmwCar=director->ConstructCar(new BMWCarBuilder());
	Car* benzCar=director->ConstructCar(new BenzCarBuilder());

	delete bmwCar;
	delete benzCar;
	delete director;
	return 0;
}

3.原型模式

概念

Prototype 模式提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。
这里注意浅拷贝和深拷贝的区别,原型模式提供的clone都是深拷贝。

原型模式主要就是clone,解决了构建复杂对象时资源消耗的问题,提升某些场景中创建对象的效率,并且还提供一种只读的限制方法,即给出对象的拷贝版本而非本身。

角色

一个抽象的原型类,其中提供一个纯虚的clone方法,继承原型类的类都必须实现clone方法用来返回自己的拷贝版本。

请添加图片描述

代码实现

这里我使用一个静态类成员变量以区分不同的对象。

#include<iostream>
using namespace std;

class Prototype{
public:
	virtual ~Prototype(){}
	virtual Prototype* clone() const =0;
protected:
	Prototype(){};
};

class ConcretePrototype:public Prototype{
public:
	ConcretePrototype(){
		cout<<"original machine "<<num<<" operation"<<endl;
		num++;
	};
	ConcretePrototype(const ConcretePrototype& cp){
		cout<<"cloned machine "<<num<<" operation"<<endl;
		num++;
	}
	~ConcretePrototype(){}
	Prototype* clone()const{
		cout<<num<<" machine cloning..."<<endl;
		return new ConcretePrototype(*this);
	}
	static int num;
};
int ConcretePrototype::num=1;


int main(){
	Prototype *p=new ConcretePrototype();
	Prototype *p1=p->clone();
	Prototype *p2=p1->clone();
	Prototype *p3=p2->clone();
	return 0;
}

总结

抽象工厂模式、建造者模式、原型模式实际上都是通过一个类或实例来创建新实例的模式。他们的区别是,抽象工厂模式更注重产品类之间的联系,建造者更注重创建产品的每个步骤,原型模式更注重创建自身的拷贝。

ITK-snap进行分割区域标注、三维显示及改变显示颜色 在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进 阅读详情

相关推荐

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 425

Android中常用的几种设计模式及在源码中的应用

单例模式 单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。 好处: 对于频繁使用的对象,可以省略从创建对象的花费时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。 由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。 单例包含:饿汉、懒汉、懒汉线程安全、DCL、静态内部类、枚举六种。 ①...

xuyin1204的博客 1775

threekingdoms.txt中文三国演义下载及实现人物出场统计

threekingdoms.txt全文下载:https://python123.io/resources/pye/threekingdoms.txt CalThreeKingdomsV1.py: #CalThreeKingdomsV1.py import jieba txt = open("threekingdoms.txt", "r", encoding = "utf-8").read() words = jieba.lcut(txt) counts = {} for word in words:

ZYYRWish_97的博客 1万+

五种创建型模式

单例模式、建造者模式、抽象工厂模式、工厂方法模式、原型模式 一、单例模式 如何有效地进行程序初始化

m0_58803607的博客 2374

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4656

GEE:使用 CCDC 算法进行连续变化检测和分类

连续变化检测和分类(CCDC)算法是一种广泛应用于遥感数据分析的方法,可以用于检测土地覆盖变化、农作物生长状态的变化以及水资源的变化等。Google Earth Engine是一个强大的云端平台,提供了丰富的遥感数据和工具,可以用于执行各种类型的遥感数据分析。本文将介绍如何使用Google Earth Engine的CCDC算法进行连续变化检测和分类。

养乐多的博客 5677

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

设计模式是指在软件开发中为解决常见问题而总结出的一套可复用的解决方案。这些模式是经过长期实践证明有效的编程经验总结,并可以在不同的项目中复用。设计模式并不是代码片段,而是对常见问题的抽象解决方案,它提供了代码结构和模块间交互的一种设计思路,帮助开发者解决特定的设计问题。设计模式的特点:通用性:设计模式针对的是软件开发中常见的设计问题,适用于各种软件工程项目。可复用性:设计模式可以在不同项目和环境下被重复使用,提高代码的可维护性和扩展性。可扩展性:设计模式有助于让代码结构更加灵活,易于扩展和修改。

仙魁XAN 3114

030、自动白平衡AWB实战:灰度世界、完美反射与色温估计的工程实现与局限

本文深入探讨了自动白平衡(AWB)算法在工程实践中的实现与局限性。作者结合实际项目经验,分析了灰度世界算法、完美反射算法和色温估计三种主流方法的优缺点和适用场景,并分享了调试过程中的关键技巧和常见陷阱。文章指出,纯色背景、多光源环境等特殊场景容易导致算法失效,需要通过混合策略和场景检测来优化。作者强调AWB调试需要大量实际场景测试,建议保留手动调节功能,并针对不同硬件配置进行参数标定。最后提出,AWB优化是一个持续迭代的过程,需要工程化的测试方法和数据处理能力。

zzfmlxs的博客 281

设计模式学习总结(2)单例模式、建造者模式、原型模式

单例模式(Singleton Pattern) 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式有以下三点注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例的好处: 某些类创建比较频繁,对于一些...

anyue0205的博客 891

Win10或Win11电脑找不到以太网网络适配器的解决方法

Win10或Win11电脑找不到以太网网络适配器的解决方法

Robot_PLC_HMI_Automation 653

053、坏点校正(DPC)进阶:静态坏点标定与动态坏点检测算法对比

文章摘要: 本文深入探讨了图像传感器坏点校正(DPC)技术,重点对比静态坏点标定与动态坏点检测算法。作者结合真实案例,指出静态标定在高增益场景下的局限性,并详细解析动态检测的核心算法、参数调优及常见误检问题(如边缘/纹理干扰)。提出“静态为主+动态为辅”的混合方案,强调阈值需随增益、亮度和温度自适应调整。文末总结六条工程建议,包括避免固定阈值、优先使用中值替换、定期更新坏点表等,强调DPC是图像质量的基础防线,需结合传感器特性综合优化。

zzfmlxs的博客 263

设计模式(二)建造者模式、单例模式、原型模式

写在前面: 你好,欢迎关注! 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的! 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然也是希望可以分享 自己的知识。如果你觉得还可以的话不妨关注一下,我们共同进步! 个人除了分享博客之外,也喜欢看书,写一点日常杂文和心情分享,如果你感兴趣,也可以关注关注! 公众号:傲骄鹿先生 ...

在路上 416

qcc514x-qcc304x调试笔记

qcc514x-qcc304x调试笔记-1-QCC514x系列 qcc514x-qcc304x调试笔记-2-开发环境搭建 qcc514x-qcc304x调试笔记-3-如何修改蓝牙名称 qcc514x-qcc304x调试笔记-4-如何修改蓝牙地址 qcc514x-qcc304x调试笔记-5-如何区分左右耳 qcc514x-qcc304x调试笔记-6-PIO相关操作 ...

leezs的博客 1244

chatGPT教你设计模式[3] ——创建型模式(单例模式、建造者模式和原型模式)

在上一篇博客中,我们已经介绍了创建者模式的最主要的部分:工厂模式及其变种。本篇博客将继续介绍创建者模式的其他三种模式:单例模式、建造者模式和原型模式。这三种模式都用于控制对象的创建过程,但是它们使用了不同的方法。单例模式确保某个类只有一个实例,建造者模式提供了一种分离复杂对象的构建过程和它的表示的方式的方法,而原型模式允许在运行时动态地创建新的对象副本。在本篇博客中,我们将深入探究这三种模式,了解它们的优缺点和使用场景,并通过示例代码加深理解。

刘炫320的博客 1468

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

设计模式——工厂模式、抽象工厂、单例模式、建造者模式、原型模式

设计模式(1/3)——工厂模式、抽象工厂、单例模式、原型模式、建造者模式

Tmoon的博客 951

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《设计模式》- 创建型(单例模式、工厂模式、建造者模式、原型模式)

创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。 常用的:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式 不常用的:原型模式

e_watermelons的博客 932

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public class Singleton { private static final Singleton singleton = new Singleton(); // 限制产生多个对象,如果该类是抽

ChangWen的博客 3491

软件工程——设计模式之创建型模式(单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。)

本文介绍了设计模式的六大原则以及设计模式中的创建型模式,包含单例模式,建造者模式,工厂模式,抽象工厂模式以及原型模式。

batcat560的博客 1671

设计模式-2.创建者模式(单例模式/工厂模式/原型模式/建造者模式)

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。

萌萌虎的博客 859

【java设计模式】创建型模式介绍(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)

本文介绍Java设计模式中创建型模式的五种

Ez4Sterben的博客 1666

【设计模式】单例模式 |建造者模式 |原型模式

单例模式:通常我们让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责八寸他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 建造者模式:看到这个模式的时候,感觉就是自己是一个工程师,可以创建很多意想不到的产品。它也称为:生成器模式。可以将产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程具有不同的内部表象的产品对象。 原型模式:其实就是从一个对象再创建另外一个可制订的对象,而且不需要知道任何创建的细节。

刘亚男 372

设计模式学习--01创建模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

设计模式是思想,开发的时候没必要生搬硬套!! 创建模式分为:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 1.简单工厂模式(不属于23种设计模式) 虽然简单工厂模式不属于23种设计模式,但是它是工厂方法模式、抽象工厂模式的基础。要理解这两种模式就要从简单工厂模式开始看起。 1.1、普通简单工厂模式 先设想一个场景,有一个工厂,工厂下面有两个车间一个生产汽车一个生产摩托车。 简单粗暴直接上代码先创建一个车间接口: //车间的定义(一个接口,抽象出,车间有一个建造动作) public inter

a843013383的博客 344

设计模式 Day1| ●创建型模式(1.单例模式、2.工厂方法模式、3.抽象工厂模式、4.建造者模式(也叫生成器模式)、5.原型模式)

创建型模式

Grace_67的博客 832

设计模式(二):创建型模式之单例模式、原型模式、工厂方法模式、抽象工厂模式和建造者模式

设计模式之创建型模式 由单例模式、原型模式、工厂方法模式、抽象工厂模式和建造者模式为代表的创建型模式,它的主要关注点是“怎样创建对象?”,主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。 创建型模式分为以下几种: 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Pr

HX_2021 647

[进阶] Android设计模式 一

前言 android开发中,必要的了解一些设计模式又是非常有必要的。 Android开发的设计模式,基本设计思想源于java的设计模式 java的设计模式有N多种,据不完全统计,迄今为止,网络出现最频繁的大概有23种。 设计模式的出现就是为了高质量、易维护和复用性强的代码 什么是设计模式? 基本定义:设计模式(Design pattern)是一套被反复使用的代码设计经验的总结。 ...

vivian的专栏 246

23种设计模式之单例模式、工厂模式、原型模式、建造者模式

23种设计模式之创建型模式,包含:单例模式、原型模式、工厂模式、工厂方法模式、抽象工厂模式、建造者模式

路漫漫其修远兮,吾将上下而求索 2417
上一篇: 【设计模式】工厂模式:简单工厂、工厂、抽象工厂
下一篇: 【设计模式】桥接模式、适配器模式、装饰器模式
Sweler*19
博客等级 码龄7年 65粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值