首先,它旨在定义一个用于创建对象的接口,以便子类可以决定实例化哪个类。方法使用类的实例化来延迟到它的子类[GOF95]。2.工厂模式结构图。
3.工厂模式抽象产品角色中的主要角色:具体产品对象共享的父类或接口:实现抽象产品角色定义的接口,工厂方法模式创建的每个对象都是具体产品对象的实例;任何在模式中创建对象的工厂类都必须实现这个接口,该接口声明一个工厂方法,该方法返回一个产品类型的对象。Creator还可以定义一个工厂方法的默认实现,返回一个ConcreteProduct对象的concrete creator的默认角色:实现抽象的工厂接口,Concrete Creator的角色与应用逻辑相关,由应用程序直接调用,创建产品对象。4.工厂模式的优缺点工厂模式的优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引入新产品。工厂模式的缺点:客户可能需要创建一个Creator子类来创建一个特定的ConcreteProduct对象。5.工厂模式应用场景1。当一个类不知道对象的类时,它必须创建2。当一个类希望它的子类指定它创建的对象时。当类将创建对象的责任委托给几个帮助子类之一时,以及当您想要本地化哪个帮助子类是代理时,6。工厂模式等模式抽象工厂(抽象工厂模式):抽象工厂模式经常使用工厂方法来实现Template Method模式:工厂方法通常在Template Methods中调用。7.工厂模式PHP示例。
?Php/** *抽象工厂角色*/接口创建者{公共函数工厂方法();}/* * *特定工厂角色a */类具体创建者a实现创建者{/* * *工厂方法返回特定产品a * @返回具体产品a */公共函数工厂方法(){返回新的具体产品a();}}/* * *混凝土工厂角色b */类混凝土创建者b实现创建者{/* * *工厂方法返回混凝土产品b * @返回混凝土产品b */公共函数工厂方法(){返回新的混凝土产品b();}}/* * *抽象产品角色*/interface product { public function operation();}/* * *特定产品角色a */class concrete producta实现产品{/* * *接口方法实现特定字符串的输出*/public function operation(){ echo ' concrete producta br/';}}/* * *特定产品角色b */class concreteproduct b实现产品{/* * *接口方法实现特定字符串的输出*/public function operation(){ echo ' concrete product b br/';}}类客户端{ /** *主程序。*/public静态函数main(){ $ creatorA=new concretora();$ ProducA=$ creatorA-factory method();$ ProducA-operation();$ creatorB=new concretorb();$ ProducT b=$ creator B- factory method();$ ProducT B- operation();} } client :3360 main();8.在工厂方法模式和工厂方法模式中,工厂方法模式和工厂方法模式的区别并不明显。方法类的核心是一个抽象的工厂类,而工厂方法模式将核心放在一个具体的类上。之所以方法模式有另一个名字叫做多态工厂模式,是因为所有特定的工厂类都有公共接口或公共抽象父类。当系统扩展需要添加新的产品对象时,只需要添加特定的对象和特定的工厂对象,原工厂对象不需要任何修改,也不需要修改客户端,很好地符合了“开-闭”原则。但是工厂方法模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂模型退化后,可以演化为工厂方法模式。
以上是用php实现工厂模式的代码,关于工厂模式有一些概念上的差异,希望对大家的学习有所帮助。