首页 > 其他分享 >工厂模式【简单工厂工厂方法抽象工厂】

工厂模式【简单工厂工厂方法抽象工厂】

时间:2024-08-09 18:52:25浏览次数:9  
标签:Show Car void 模式 工厂 class 抽象 public

简单工厂:将对象的创建封装在子类当中,客户不需要去手动创建对象,只需要调用一些接口传递不同的类型参数来创建对象。但是在一个工厂里 存在多种产品,会导致工厂的频繁修改

工厂方法:实现了不同的产品存在于不同的工厂,使其解耦

抽象工厂:实现了不同的工厂里面不止一种产品

 简单工厂:一个工厂生产奥迪车,宝马车

class Car
{
public:
	virtual  void  Show() = 0;
};
class  Audi : public Car
{
public:
	void Show()
	{
		cout << "奥迪  car" << endl;
	}
};
class  BWM : public Car
{
public:

	void Show()
	{
		cout << "宝马  car" << endl;
	}
};
enum CarType
{
	bwm, audi
};
class Factory
{
	
public:  Car* CreateCar(CarType t)
	   {
		   switch (t)
		   {
		   case 0:
			   return new BWM();
			   break;
		   case 1:
			   return new Audi();
			   break;
		   defualt:
			   cerr << "error" << t<< endl;
			   exit(1);
			}
	   }
};

int main()
{
	Factory* fa = new Factory();
	Car* a = fa->CreateCar(bwm);
	Car* b = fa->CreateCar(audi);
	a->Show();
	b->Show();
	return 0;
}

 工厂方法:奥迪工厂创建奥迪车,宝马工厂创建宝马车

class Car
{
public:
	virtual  void  Show() = 0;
};
class  Audi : public Car
{
private:std::string name;
public:
	Audi(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "奥迪  car" << name<<endl;
	}
};
class  BWM : public Car
{
private:std::string name;
public:
	BWM(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "宝马  car" <<name<< endl;
	}
};

class Factory
{

public: virtual  Car* CreateCar(string name) = 0;

};
class BwmFactory :public Factory
{
public:
	Car* CreateCar(std::string name)
	{
		return new BWM(name);
	}
};

class AudiFactory :public Factory
{
public:
	Car* CreateCar(std::string name)
	{
		return new Audi(name);
	}
};
int main()
{
	BwmFactory bw;
	std::string name("shining");
	Car*p=bw.CreateCar(name);
	p->Show();
	AudiFactory cw;
	Car* p1 = cw.CreateCar(name);
	p1->Show();
	return 0;
}

 宝马工厂生产宝马车以及宝马灯,奥迪工厂生产奥迪车奥迪灯,一个工厂生产产品簇,而非单个产品

class Car
{
public:
	virtual  void  Show() = 0;
};
class  Audi : public Car
{
private:std::string name;
public:
	Audi(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "奥迪  car" << name << endl;
	}
};
class  BWM : public Car
{
private:std::string name;
public:
	BWM(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "宝马  car" << name << endl;
	}
};



class Led
{
public:
	virtual  void  Show() = 0;
};
class  AudiLed : public Led
{
private:std::string name;
public:
	AudiLed(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "奥迪  Led" << name << endl;
	}
};
class  BWMLed : public Led
{
private:std::string name;
public:
	BWMLed(std::string a)
	{
		name = a;
	}
	void Show()
	{
		cout << "宝马  Led" << name << endl;
	}
};
class Factory
{

public: virtual  Car* CreateCar(string name) = 0;

};
class BwmFactory :public Factory
{
public:
	Car* CreateCar(std::string name)
	{
		return new BWM(name);
	}
	Led* CreateLed(std::string name)
	{
		return new BWMLed(name);
	}
};

class AudiFactory :public Factory
{
public:
	Car* CreateCar(std::string name)
	{
		return new Audi(name);
	}
	Led* CreateLed(std::string name)
	{
		return new AudiLed(name);
	}
};
int main()
{
	BwmFactory bw;
	std::string name("shining");
	Car* p = bw.CreateCar(name);
	Led* l1 = bw.CreateLed("宝马大灯");
	p->Show();
	l1->Show();
	AudiFactory cw;
	Car* p1 = cw.CreateCar(name);
	Led* l11 = bw.CreateLed("奥迪大灯");
	p1->Show();
	l11->Show();
	return 0;
}

标签:Show,Car,void,模式,工厂,class,抽象,public
From: https://blog.csdn.net/weixin_62518305/article/details/141068585

相关文章

  • [设计模式]单例模式
    单例模式懒汉式,线程不安全publicclassSingleton{privatestaticSingletoninstance;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){instance=newSingleton();}......
  • Rust实现构建器模式和使用Bon库中的构建器
    实现构建器模式的一种方式这里参考资料2的文章,修改部分代码后如下。这段代码的目的是使用构建器模式创建和初始化Person对象。以下是各部分的解释:结构体定义Person:定义了一个结构体,包含name、age、address和sex四个字段。address和sex是可选的PersonBuilder:用于逐步构......
  • [设计模式]装饰者模式
    抽象构件publicabstractclassFastFood{publicStringdesc;publicintprice;publicabstractStringgetDesc();publicabstractintgetPrice();}具体构件米饭publicclassRiceextendsFastFood{publicRice(){this.desc......
  • “斯诺克”不等于“台球”-《分析模式》漫谈17
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集“AnalysisPatterns”的第一章有这么一句:Considersomeonewhowantstowritesoftwaretosimulatea game of snooker. 2004(机械工业出版社)中译本的译文为: game翻译成“游......
  • 工厂英文 | 之[装配线]
    1.产品相关中文英文缩写产品Product、Production 半成品SemiFinishedGoods、Semi-ManufacturedGoods 成品FinishedGoods、FinishedProduct、FinishedArticles 最终产品FinalGoodsFG零件、部件AssemblyPart 副产品By-Product 副......
  • 一二三物联网智慧工厂运维管理平台
    智慧工厂运维管理平台是一种基于信息技术和物联网技术的管理平台,主要用于智能制造领域中的设备管理、生产管理和质量管理。该平台能够实现对工厂生产过程中的各种设备、生产线、生产计划、生产数据、质量数据等信息的实时监测、预测、维护和管理,以提高生产效率和降低生产成本。......
  • K8S中,flannel有几种模式?
    在Kubernetes(K8S)中,Flannel作为一个流行的容器网络接口(CNI)插件,用于为集群中的容器提供网络互通能力。Flannel支持多种模式来实现其网络功能,主要包括以下几种常见模式:1.VXLAN模式描述:VXLAN(VirtualExtensibleLAN)是Flannel的默认后端驱动,它使用VXLAN封装技术来创建跨节点的虚拟......
  • 基于java+springboot+vue基于MVC模式的考研论坛交流管理系统的设计与实现万字文档和PP
    前言......
  • 策略模式揭秘:如何让飞书、企业微信、钉钉的入职与生日祝福更智能?
    继上一篇飞书、企业微信、钉钉如何精准推送入职与生日祝福背后的数据魔法之后,今天在此基础上分享下策略模式。策略模式是一种行为型设计模式,在工作中使用的频次非常高。生日祝福,入职周年祝福等,每一种都是一种不同的策略。不了解背景的人可以先去看看入职周年祝福与生日......
  • Java设计模式和AOP编程
    Java六大设计原则;Java23种设计模式(在此介绍三种设计模式)Java设计模式单例模式应用场景:spring中bean的作用域用的就是单例模式//基本的单例模式————懒汉式publicclassstudent{//3.创建static修饰的成员变量privatestaticstudentstu;//1.设计私......