首页 > 其他分享 >软件设计模式概念篇

软件设计模式概念篇

时间:2024-05-15 22:10:24浏览次数:21  
标签:软件设计 创建 接口 工厂 概念 抽象 模式 产品

创建型模式

1、创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
2、为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不需要清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
3、创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。



工厂方法模式(Factory Method)

模式动机:

定义一个抽象工厂类,并在具体工厂类里重写这个抽象工厂类中定义的抽象方法。抽象化的结果使这种结构可以在不修改已有具体工厂类的情况下引进新的产品。

模式定义:

1、定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2、在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,将类的实例化操作延迟到子类中完成。
3、工厂方法模式属于类创建型模式。

结构


定义抽象产品接口(Product):定义一个抽象产品接口,它声明了产品对象的通用属性和方法。所有具体产品类都必须实现这个接口方法。
创建具体产品类(Concrete Product):实现抽象产品接口的具体产品类。每个具体产品类表示一种具体的产品。
定义抽象工厂接口(Creator):创建一个抽象工厂接口,该接口声明了工厂方法,用于创建产品对象。
创建具体工厂类(Concrete Creator):实现抽象工厂接口的具体工厂类,每个具体工厂类负责创建特定类型的产品。在客户端中使用工厂方法:

代码实现

#include<iostream>
#include<string>
using namespace std;

//抽象产品
class Product
{
public:
	virtual void productMethod() = 0;
};
//具体产品1
class ConcreteProduct_Xiaomi : public Product
{
	void productMethod() override
	{
		cout << "小米手机生产。" << endl;
	}
};

//具体产品2
class ConcreteProduct_Huawei : public Product
{
	void productMethod() override
	{
		cout << "华为手机生产。" << endl;
	}
};

//抽象工厂
class Creator
{
public:
	virtual Product* factoryMethod() = 0;
};
//具体工厂1
class ConcreteCreator_Xiaomi : public Creator
{
public:
	Product* factoryMethod() override
	{
		return new ConcreteProduct_Xiaomi();
	}
};
//具体工厂2
class ConcreteCreator_Huawei : public Creator
{
public:
	Product* factoryMethod() override
	{
		return new ConcreteProduct_Huawei();
	}
};

int main()
{
	//使用具体工厂创建具体产品
	Creator* Xiaomi_Fac = new ConcreteCreator_Xiaomi();
	Product* Xiaomi_pro = Xiaomi_Fac->factoryMethod();
	Xiaomi_pro->productMethod();

	Creator* Huawei_Fac = new ConcreteCreator_Huawei();
	Product* Huawei_pro = Huawei_Fac->factoryMethod();
	Huawei_pro->productMethod();
}

应用场景

后续补充



抽象工厂模式(Abstract Factory)

模式动机:

在工厂方法模式中,每个具体工厂对应一种具体产品。有时,我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。

抽象工厂模式定义:

1、提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2、抽象工厂模式属于对象创建型模式

结构:


抽象工厂接口(Abstract Factory): 定义了一组方法,每个方法用于创建某一类对象,通常包括多个产品族的创建方法。
具体工厂类(Concrete Factory): 实现了抽象工厂接口,负责创建具体的产品对象。每个具体工厂类通常对应一个产品族。
抽象产品接口(Abstract Product): 义了一组方法,用于描述产品的通用行为。
具体产品类(Concrete Product): 实现了抽象产品接口,表示真正的产品对象。每个具体产品类属于某个产品族。

代码实现:

#include<iostream>
#include<string>
using namespace std;

//抽象手机产品
class aF_ProductPhone
{
public:
	virtual void phoneMethod() = 0;
};
//具体产品-小米手机
class aF_ConcreteProductPhone_Xiaomi : public aF_ProductPhone
{
public:
	void phoneMethod() override
	{
		cout << "小米手机生产。" << endl;
	}
};

//具体产品-华为手机
class aF_ConcreteProductPhone_Huawei : public aF_ProductPhone
{
public:
	void phoneMethod() override
	{
		cout << "华为手机生产。" << endl;
	}
};

//抽象电脑产品
class aF_ProductComputer
{
public:
	virtual void computerMethod() = 0;
};
//具体产品-小米电脑
class aF_ConcreteProductComputer_Xiaomi : public aF_ProductComputer
{
public:
	void computerMethod() override
	{
		cout << "小米电脑生产。" << endl;
	}
};

//具体产品-华为电脑
class aF_ConcreteProductComputer_Huawei : public aF_ProductComputer
{
public:
	void computerMethod() override
	{
		cout << "华为电脑生产。" << endl;
	}
};

//抽象工厂
class aF_AbstractFactory
{
public:
	virtual aF_ProductPhone* createPhone() = 0;
	virtual aF_ProductComputer* createComputer() = 0;
};

//具体工厂-小米
class aF_XiaomiFactory : public aF_AbstractFactory
{
public:
	aF_ProductPhone* createPhone() override
	{
		return new aF_ConcreteProductPhone_Xiaomi();
	}
	aF_ProductComputer* createComputer() override
	{
		return new aF_ConcreteProductComputer_Xiaomi();
	}
};

//具体工厂-华为
class aF_HuaweiFactory : public aF_AbstractFactory
{
public:
	aF_ProductPhone* createPhone() override
	{
		return new aF_ConcreteProductPhone_Huawei();
	}
	aF_ProductComputer* createComputer() override
	{
		return new aF_ConcreteProductComputer_Huawei();
	}
};
int main()
{
	//小米工厂
	aF_AbstractFactory* xiaomiFac = new aF_XiaomiFactory();
	aF_ProductPhone* xiaomiPhone = xiaomiFac->createPhone();
	xiaomiPhone->phoneMethod();
	aF_ProductComputer* xiaomiComputer = xiaomiFac->createComputer();
	xiaomiComputer->computerMethod();
	//华为工厂
	aF_AbstractFactory* huaweiFac = new aF_HuaweiFactory();
	aF_ProductPhone* huaweiPhone = huaweiFac->createPhone();
	huaweiPhone->phoneMethod();
	aF_ProductComputer* huaweiComputer = huaweiFac->createComputer();
	huaweiComputer->computerMethod();
}

应用场景

后续补充



单例模式(Singleton Pattern)

模式动机:

对于系统中的某些类来说,有且只能有一个实例。
(1)一个系统只能有一个窗口管理器。
(2)系统中可以有许多打印机,但是只能有一个打印机正在工作。

单例模式定义:

1、确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
2、单例模式属于对象创建型模式。
3、单例负责类的实例的创建,且是唯一的。因此,在单例类的外部无法使用new创建。否则,该类的实例对象就不是单例。

结构:

代码实现:

懒汉式单例模式:


饿汉式单例模式:


应用场景

后续补充



持续更新中

标签:软件设计,创建,接口,工厂,概念,抽象,模式,产品
From: https://www.cnblogs.com/feng-Ling/p/18188076

相关文章

  • VMware Fusion 13.5.2 for Mac 发布,产品订阅模式首个重大变更
    VMwareFusion13.5.2forMac发布,产品订阅模式首个重大变更适用于基于Intel处理器和搭载Apple芯片的Mac的桌面虚拟化软件请访问原文链接:https://sysin.org/blog/vmware-fusion-13/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org好消息是:今天我们可以免费使......
  • VMware Workstation 17.5.2 Pro 发布,产品订阅模式首个重大变更
    VMwareWorkstation17.5.2Pro发布,产品订阅模式首个重大变更基于x86的Windows、Linux桌面虚拟化软件请访问原文链接:https://sysin.org/blog/vmware-workstation-17/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org好消息是:今天我们可以免费使用VMwareWorksta......
  • 软件设计师基础学习 十二
    十二、项目管理12.1范围管理范围管理确定在项目内包括什么工作和不包括什么工作,由此界定的项目范围在项目的全生命周期内可能因种种原因而变化,项目管理范围也要管理项目范围的这种变化。项目范围的变化也叫变更对项目范围的管理,是通过5个管理过程来实现的:规划范围管理(编制......
  • 架构每日一学 6:作为架构师,你必须学会寻找商业模式
    本文首发于公众平台:腐烂的橘子在前面的文章中,我们已经讲了架构师的两条生存法则,第一条是有且仅有一个目标,感兴趣的可以看一下原文:架构每日一学2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)第二条生存法则是架构活动要顺应人性:架构每日一学5:拼多多如何通过洞察人性......
  • 地产新模式,这次真成了
    当前房地产的主线,除了「救市」,还有很重要的是「改革」。 怎么改? 一是租售并举,建立保障住房体系。也就是我们说过很多次的,供给侧结构改革。保障性租赁住房还在加速。 二是从“大开发”模式,向“大资管”模式转型。也就是对存量物业的改造升级、运营升级、经营模式升级。 ......
  • 1-网页的相关概念
    什么是网页网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是HTML格式的文件,它要通过浏览器来阅读。是构成网站的基本元素,通常由图片,链接,文字,声音,视频等元素组成。通常我们看到的网页,常见以.htm或.html......
  • 《Linux内核完全注释》学习笔记:2.1 Linux内核模式和体系结构
    2.1Linux内核模式和体系结构操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务用户应用程序图2-1操作系统组成部分用户应用程序:指那些字处理程序、互联网浏览器程序或用户自行编制的各种应用程序;操作系统服务程序:指向用户提供的服务,被看作是操作系统部分功能......
  • 设计模式学习(二)工厂模式——简单工厂模式
    目录前言简单工厂模式简介示例优点缺点使用场景前言工厂模式是一种常用的设计模式,属于创建型模式之一。它的主要目的是为了解耦组件之间的依赖关系。通过使用工厂模式,系统中的具体类的实例化过程可以被抽象出来,从而使得系统更加模块化,增强了系统的可维护性和可扩展性。工厂模式......
  • Qt 中用Q_GLOBAL_STATIC来实现线程安全的单例模式
    官方说明:Qt中有个宏Q_GLOBAL_STATIC可以用来创建一个全局静态变量,下面看下官方文档的说明:Q_GLOBAL_STATIC(Type,VariableName)CreatesaglobalandstaticobjectoftypeQGlobalStatic,ofnameVariableNameandthatbehavesasapointertoType.Theobjectcr......
  • CSS布局概念与技术教程
    以下是一份CSS布局学习大纲,它涵盖了基本到高级的CSS布局概念和技术引言欢迎来到CSS教程!如果你已经掌握了HTML的基础知识,那么你即将进入一个全新的世界,通过学习CSS(CascadingStyleSheets,层叠样式表),你将能够赋予网页丰富的视觉效果和布局。CSS是前端开发中不可或缺的一部分,它可......