最常用的设计模式----工厂模式家族(简单工厂模式, 工厂方法模式, 抽象工厂模式)

本文介绍了工厂模式的三个主要类型:简单工厂模式、工厂方法模式和抽象工厂模式,强调它们在设计模式中的重要性。简单工厂模式因违背开放-封闭原则而在扩展时存在局限。工厂方法模式通过引入抽象类,实现了创建过程的封装,而抽象工厂模式则关注于创建一系列相关或相互依赖的对象。文章以计算器设计为例,阐述了这些模式的应用,并提供了简单的代码示例。
摘要由CSDN通过智能技术生成

        工厂模式是个系列,分为简单工厂模式, 工厂方法模式, 抽象工厂模式,这三种模式也非常常用。这些模式最最经典的就例子就是设计计算器。

     简单工厂模式

         严格的说,简单工厂模式并不是23种常用的设计模式之一,它只算工厂模式的一个特殊实现。简单工厂模式在实际中的应用相对于其他2个工厂模式用的还是相对少得多,因为它只适应很多简单的情况,最最重要的是它违背了我们在概述中说的开放-封闭原则。因为每次你要新添加一个功能,都需要在生switch-case 语句(或者if-else 语句)中去修改代码,添加分支条件。

简单工厂模式角色分配:

       Creator(产品创建者)
              简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
      Product ( 产品抽象类)
              简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
       Concrete Product (具体产品)
              是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

简单工厂模式uml图:

                    

      考虑下面一个事例: 加入你是一个商人,你做的的是手机生意。现在你生产android 手机和iphone等,考虑到以后你可能还会生产其他手机例如ubuntu手机。假定你选择了简单工厂模式来实现。那么显然,我们需要所有产品的抽象基类(Product) 即是Phone类:

class Phone 
{
public:
	virtual ~Phone(){};//在删除的时候防止内存泄露
	virtual void call(string number) = 0;
};

然后我们需要具体的产品类 Concrete Product: AndroidPhone 和 IosPhone

class AndroidPhone : public Phone 
{
public:
	void call(string number){ cout<<"AndroidPhone is calling..."<<endl;}
};

class IosPhone : public Phone
{
public:
	void call(string number) { cout<<"IosPhone is calling..."<<endl;}
};

最后我们需要Creator

class PhoneFactory
{
public:
	Phone* createPhone(string phoneName)
	{
		if(phoneName == "AndroidPhone")
		{
			return new AndroidPhone();
		}else if(phoneName == "IosPhone")
		{
			return new IosPhon
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值