工厂模式及简单的工厂模式详解

工厂模式

实现了创造者和调用者的分离

核心本质

实例化对象用工厂方法代替new操作
将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦

详细分类

① 简单工厂模式

用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)

② 工厂方法模式

用来生产同一等级结构中的固定产品。(支持增加任意产品)

③ 抽象工厂模式

用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持增加产品族)

不用简单工厂模式

//创建一个手机接口
public interface Phone{
	void call();
}
class Mi implement Phone{
	@Override
	void call(){
		System.out.println("Mi");
	}
}
class HUAWEI implement Phone{
	@Override
	void call(){
		System.out.println("HUAWEI");
	}
}

在没有使用简单工厂模式的时候要使用Phone接口的实现类只有通过new操作(或者反射)

public void main(String[] args){
	Phone mi = new Mi();
	Phone huawei = new HUAWEI();
	mi.call();
	huawei.call();
}

在没有使用简单工厂模式的时候,我们要考虑接口类,还要考虑实现类,并且不能实现创建者和使用者分离

使用简单工厂模式(SimpleFactory)

简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,接收的参数的不同(或调用的方法不同)来返回不同的对象实例

//根据参数创建需要的对象
public class  SimplePhoneFactory{
	public static Phone newPhone(String type){
		if(type.equal("mi")){
			return new Mi();
		}else if(type.equal("huawei")){
			return new HUAWEI();
		}else{
			return null;
		}
	}
}
//或者直接调用静态方法获取
public class SimplePhoneFactory{
	public static Phone mi(){
		return new Mi();
	}
	public static Phone huawei(){
		return new HUAWEI();
	}
}

或许看上去简单工厂模式的代码更加繁琐一些,但是简单工厂模式获取对象的时候不用考虑Mi和HUAWEI两个类,只需要知道想要获取Phone接口的实现类调用工厂模式的方法即可,不但实现了创建者和使用者分离降低了代码的耦合度,还避免了对类的关系的考虑,但是简单工厂模式不修改代码的话无法扩展(违反OCP原则),所以就要用到后面的工厂方法模式和抽象工厂模式了

我会在后面的博客中一次展示工厂方法模式和抽象工厂模式的用法,简单的工厂模式可以当做一个很好的思维引导,让大家在后面的工厂方法模式和抽象工厂模式中更加容易理解

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
工厂模式是一种软件设计模式,用于创建对象。在Python中,可以使用工厂模式来封装对象的创建过程,并且可以在运行时动态地切换不同的对象实现。 工厂模式包括抽象工厂角色、具体工厂角色和产品角色三个主要组成部分。 抽象工厂角色是一个抽象的类或接口,定义了一个或多个创建产品的方法。在Python中,通常使用ABCMeta元类和abstractmethod装饰器来定义抽象基类和抽象方法。 具体工厂角色是抽象工厂角色的具体实现,实现了抽象工厂角色的创建产品的方法。 产品角色是具体工厂角色创建的对象,它们共同实现了同一个接口或继承了同一个父类。 在示例中,我们可以看到具体工厂角色的代码示例。其中,AliFactory、HuabeiFactory和WechatFactory分别实现了create_payment方法,并返回了对应的支付对象。这些具体工厂角色都继承自抽象工厂角色PaymentFactory,而PaymentFactory中定义了抽象方法create_payment。 通过使用工厂模式,我们可以封装对象的创建过程,提高代码的灵活性和可维护性。当需要创建不同的对象时,我们只需要调用对应的具体工厂角色来创建对象,而不需要直接实例化具体的产品角色。 综上所述,工厂模式是一种通过抽象工厂角色和具体工厂角色来封装对象创建过程的设计模式,可以实现对象的动态切换和解耦。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [23种Python设计模式工厂方法模式详解](https://blog.csdn.net/weixin_51098806/article/details/123917610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值