Php 接口和类与简单工厂设计模式
我的一个朋友告诉我,如果我想成为一名优秀的程序员,那么我需要学习设计模式。我从那个网站开始: 我从简单的工厂开始。 正如您在该页面上看到的,您需要实现:Php 接口和类与简单工厂设计模式,php,design-patterns,factory-pattern,Php,Design Patterns,Factory Pattern,我的一个朋友告诉我,如果我想成为一名优秀的程序员,那么我需要学习设计模式。我从那个网站开始: 我从简单的工厂开始。 正如您在该页面上看到的,您需要实现: 接口门 木匠类 门类工厂 您可以这样使用它(PHP): 但我想知道为什么我需要类DoorFactory的层,它为我提供了具有给定参数的WoodenDoor的新实例,而我可以简单地执行以下操作: Door door = new WoodenDoor(100, 200); 当我可以通过使用新的ClassName语句传递给定的构造函数参数来简
- 接口门
- 木匠类
- 门类工厂
Door door = new WoodenDoor(100, 200);
当我可以通过使用新的ClassName语句传递给定的构造函数参数来简单地创建实例时,创建工厂有什么大不了的
编辑 参数,表明我可以轻松管理给定元素多次发生的更改,并通过此解决方案撤销: 创建给定类(作为factory解决方案中的给定factory类型),如:
类LongWoodenDoor,它扩展WoodenDoor类并使用带有给定参数的WoodenDoor构造函数。e、 g使用超级(“100”、“200”) 你绝对可以使用
Door door = new WoodenDoor(100, 200);
创建门,但我要引用以下教程:
简单工厂只为客户机生成一个实例,而不向客户机公开任何实例化逻辑
工厂的目的是,为了创建门,客户机不需要知道任何关于door类的构造函数的信息
在创建门时,您的工厂无法获取任何参数:
makeDoor功能:
Door* DoorFactory::makeDoor()
{
Door *newDoor = new Door(200, 100);
return newDoor;
}
在创建门的位置:
Door door = DoorFactory::makeDoor();
在这种情况下,工厂封装了关于门的信息,这样您就不需要知道门的尺寸。显然,您希望能够灵活地使用自己的尺寸定义门,但在某些情况下,隐藏参数以避免更改是有益的
另外,如果您希望在将来修改类Door的构造函数,请说添加另一个名为thickness的参数:
您不必更改项目中的每个门实例,只需在一个位置修改工厂代码即可:
Door* DoorFactory::makeDoor(double width, double height)
{
Door *newDoor = new Door(width, height, 5);
return newDoor;
}
这样,如果项目的需求发生变化,重构就更容易了。您肯定可以使用
Door door = new WoodenDoor(100, 200);
创建门,但我要引用以下教程:
简单工厂只为客户机生成一个实例,而不向客户机公开任何实例化逻辑
工厂的目的是,为了创建门,客户机不需要知道任何关于door类的构造函数的信息
在创建门时,您的工厂无法获取任何参数:
makeDoor功能:
Door* DoorFactory::makeDoor()
{
Door *newDoor = new Door(200, 100);
return newDoor;
}
在创建门的位置:
Door door = DoorFactory::makeDoor();
在这种情况下,工厂封装了关于门的信息,这样您就不需要知道门的尺寸。显然,您希望能够灵活地使用自己的尺寸定义门,但在某些情况下,隐藏参数以避免更改是有益的
另外,如果您希望在将来修改类Door的构造函数,请说添加另一个名为thickness的参数:
您不必更改项目中的每个门实例,只需在一个位置修改工厂代码即可:
Door* DoorFactory::makeDoor(double width, double height)
{
Door *newDoor = new Door(width, height, 5);
return newDoor;
}
这样,如果项目的需求发生变化,重构就更容易了。设计模式是一个很好的建议!
工厂方法模式也是很好的建议。factory方法的目的是定义一个用于创建对象的接口,但是您可以在运行时确定将创建哪个对象!因此,如果你不知道这是木制的还是金属的或塑料的门,你必须使用工厂的方法
但是,如果你确实知道它将是木制的,那么你可以坚持吻(保持简单,愚蠢)和雅格尼(你不需要它)原则。设计模式确实是一个很好的建议!
工厂方法模式也是很好的建议。factory方法的目的是定义一个用于创建对象的接口,但是您可以在运行时确定将创建哪个对象!因此,如果你不知道这是木制的还是金属的或塑料的门,你必须使用工厂的方法
但是如果你肯定知道它是木制的,你可以坚持用亲吻(保持简单,愚蠢)和雅格尼(你不需要它)原则。构造函数与工厂模式:@BenRoob我相信你把工厂模式与静态工厂方法混淆了……构造函数与工厂模式:@BenRoob我相信你把工厂模式与静态工厂方法混淆了……好的。但我可以创建一个类,例如LongWoodenDoor,它将实现WoodenDoor。在LongWoodEndor构造函数中,它将使用常量参数简单地调用super(WoodEndor构造函数)。我会把它叫做Door Door=new LongWoodeDoor();我这里也没有关于尺寸的信息,你可以这样做:
DoorFactory::makeDoor(“普通木门”)代码>或门工厂::makeDoor(“长木门”)代码>然后在工厂中修改逻辑。对不起,我没有很多使用Factory.ok的经验。但我可以创建一个类,例如LongWoodenDoor,它将实现WoodenDoor。在LongWoodEndor构造函数中,它将使用常量参数简单地调用super(WoodEndor构造函数)。我会把它叫做Door Door=new LongWoodeDoor();我这里也没有关于尺寸的信息,你可以这样做:DoorFactory::makeDoor(“普通木门”)代码>或门工厂::makeDoor(“长木门”)代码>然后在工厂中修改逻辑。对不起,我没有很多使用工厂的经验。但我也能确定