win xp 个人网站免费建设,黑五类广告推广,陕西省住房城乡建设部门户网站,免费发布推广的网站有哪些简介#xff1a;
简单工厂模式#xff0c;它提供了一个用于创建对象的接口#xff0c;但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象#xff0c;并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中
简单工厂模式它提供了一个用于创建对象的接口但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中有一个专门的类负责创建其他类的实例这个类称为工厂类。被创建的实例通常都具有共同的父类。工厂类中有一个用于创建对象的静态工厂方法系统可以根据该方法所传入的参数来动态决定应该创建出哪一个产品类的实例。 以汽车生产为例简单工厂模式可以模拟该生产过程。我们将汽车抽象为一个产品接口不同品牌的汽车则具体实现该接口并提供各自的功能。工厂类负责根据传入的品牌参数来创建相应的汽车对象。 以下是简单工厂模式的步骤 1、定义产品接口首先定义一个产品接口例如“汽车”它包含一些公共的方法如“启动”、“刹车”等。 2、实现具体产品类针对不同的品牌创建具体的实现类来实现产品接口。例如“奔驰”和“宝马”都实现了“汽车”接口并提供了各自特有的功能。 3、创建工厂类创建一个工厂类它包含一个静态工厂方法用于根据传入的品牌参数来创建相应的汽车对象。例如在“奔驰”工厂中我们创建了一个静态方法“createCar”它根据传入的品牌来实例化相应的汽车对象。 4、使用工厂类创建产品对象客户端代码直接调用工厂类的静态工厂方法来创建需要的汽车对象而无需关心具体的品牌和创建细节。例如我们调用“奔驰”工厂的“createCar”方法并传入型号参数“E-260-L”即可得到一个奔驰E260L对象。 简单工厂模式的优点它能将对象的创建和对象本身业务处理分离降低系统的耦合度使得两者修改起来都相对容易。同时由于工厂方法是静态方法使用起来很方便只需通过工厂类类名直接调用即可无需了解对象的创建细节。它可以在不修改客户端代码的情况下扩展新的产品类型因为新产品只需实现抽象产品接口并在工厂类中添加相应的创建逻辑即可。而不需要修改其它已经存在的代码这样就保持了良好的封装性。 简单工厂模式的缺点如果Shape类型的数量很多那么ShapeFactory类就会变得很庞大而且所有创建对象的逻辑都集中在一个类中破坏了代码的模块化破坏了“开闭原则”。 示例
一、C#简单工厂模式
以下是一个示例展示了如何在C#中实现简单工厂模式
// 接口
public interface Shape
{ void Draw();
} // 实现接口的实体类
public class Circle : Shape
{ public void Draw() { Console.WriteLine(绘制一个圆形); }
} public class Rectangle : Shape
{ public void Draw() { Console.WriteLine(绘制一个矩形); }
} // 工厂类创建实体类的对象
public class ShapeFactory
{ // 通过GetShape方法来根据传入的字符串来返回相应的Shape类型的对象 public Shape GetShape(string type) { if (type Circle) { return new Circle(); } else if (type Rectangle) { return new Rectangle(); } else { throw new ArgumentException(无效的图形类型); } }
}
//使用这个工厂你可以在运行时决定创建哪种类型的 Shape。例如
class FactoryPatternDemo
{static void Main(string[] args){ShapeFactory shapeFactory new ShapeFactory(); Shape shape1 shapeFactory.GetShape(Circle); shape1.Draw(); // 输出绘制一个圆形 Shape shape2 shapeFactory.GetShape(Rectangle); shape2.Draw(); // 输出绘制一个矩形 }
}
二、java简单工厂模式
以下是一个示例展示了如何在Java中实现简单工厂模式
// 接口
public interface Shape { void draw();
}
// 实现接口的实体类
public class Circle implements Shape { Override public void draw() { System.out.println(绘制一个圆形); }
} public class Rectangle implements Shape { Override public void draw() { System.out.println(绘制一个矩形); }
}
// 工厂类创建实体类的对象
public class ShapeFactory { // 通过getShape方法来根据传入的字符串来返回相应的Shape类型的对象 public Shape getShape(String type) { if (type.equalsIgnoreCase(CIRCLE)) { return new Circle(); } else if (type.equalsIgnoreCase(RECTANGLE)) { return new Rectangle(); } else { throw new IllegalArgumentException(无效的形状类型); } }
}
//然后我们就可以这样使用这个工厂类创建Shape对象
public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory new ShapeFactory(); Shape shape1 shapeFactory.getShape(CIRCLE); shape1.draw(); // 输出绘制一个圆形 Shape shape2 shapeFactory.getShape(RECTANGLE); shape2.draw(); // 输出绘制一个矩形 }
} 三、javascript简单工厂模式
在JavaScript 中它使用一个共同的接口来实例化不同类型的对象而无需直接使用具体类。在工厂模式中您可以创建一个工厂类来负责创建对象而无需暴露创建逻辑。 以下是一个示例展示了如何在JavaScript中实现简单工厂模式
// Car 接口
class Car { constructor(name) { this.name name; } start() { console.log(this.name started); } stop() { console.log(this.name stopped); }
} // CarFactory 工厂类
class CarFactory { constructor() { this.cars {}; } // 创建轿车对象 createCar(name, typeSedan) { if (!this.cars[type]) { this.cars[type] new Car(type); } return this.cars[type]; } // 创建卡车对象 createTruck(name, typePickup) { if (!this.cars[type]) { this.cars[type] new Car(type); } return this.cars[type]; }
}
//接下来我们使用 CarFactory 工厂类来制造不同类型的汽车
// 创建 CarFactory 实例
const carFactory new CarFactory(); // 制造轿车
const sedan carFactory.createCar(Alice, Sedan);
sedan.start(); // 输出 Sedan started
sedan.stop(); // 输出 Sedan stopped // 制造卡车
const truck carFactory.createCar(Bob, Truck);
truck.start(); // 输出 Pickup started
truck.stop(); // 输出 Pickup stopped
四、C简单工厂模式
在C中可以通过以下步骤来实现简单工厂模式 1、定义一个抽象基类或接口其中包含所有派生类的公共方法。这个抽象基类可以看作是工厂的公共接口它不知道具体对象的类型。 2、创建多个派生类这些派生类实现了抽象基类中的所有公共方法每个派生类具有不同的状态和行为。 3、创建一个工厂类它包含一个用于创建对象的纯虚函数。这个纯虚函数根据传入的参数类型来创建相应的派生类对象并返回该对象的指针。 4、在客户端代码中通过调用工厂类的纯虚函数来创建对象。由于客户端代码不知道具体对象的类型因此可以使用抽象基类的指针来操作这些对象。 以下是一个示例展示了如何在C中实现简单工厂模式
#include iostream // 抽象基类
class Shape {
public: virtual void draw() 0;
}; // 圆形派生类
class Circle : public Shape {
public: void draw() override { std::cout 绘制圆形 std::endl; }
}; // 矩形派生类
class Rectangle : public Shape {
public: void draw() override { std::cout 绘制矩形 std::endl; }
}; // 工厂类
class ShapeFactory {
public: // 根据传入的参数类型来创建相应的对象并返回该对象的指针 static Shape* createShape(const std::string type) { if (type Circle) { return new Circle(); } else if (type Rectangle) { return new Rectangle(); } else { throw std::invalid_argument(无效的形状类型); } }
}; int main() { // 创建圆形对象 Shape* circle ShapeFactory::createShape(Circle); circle-draw(); // 输出绘制圆形 delete circle; // 创建矩形对象 Shape* rectangle ShapeFactory::createShape(Rectangle); rectangle-draw(); // 输出绘制矩形 delete rectangle; return 0;
}
五、python简单工厂模式
在Python中工厂模式通常是通过函数或类来创建其他类的实例。简单工厂模式是一种常见的工厂模式它通过一个单独的工厂类来创建产品对象这个工厂类一般用来创建与环境有关的具体产品。 下面是一个Python中简单工厂模式的例子
class Product(object): def operation(self): pass class ConcreteProduct1(Product): def operation(self): return ConcreteProduct1 operation class ConcreteProduct2(Product): def operation(self): return ConcreteProduct2 operation class Factory: staticmethod def create_product(product_type): if product_type type1: return ConcreteProduct1() elif product_type type2: return ConcreteProduct2() else: return None def client_code(factoryFactory): product factory.create_product(type1) print(product.operation()) if __name__ __main__: client_code() 六、Go简单工厂模式
以下是一个示例展示了如何在go中实现简单工厂模式
// 抽象产品接口
interface Product { void use();
} // 具体产品类1
class ConcreteProduct1 implements Product { public void use() { System.out.println(使用具体产品1); }
} // 具体产品类2
class ConcreteProduct2 implements Product { public void use() { System.out.println(使用具体产品2); }
} // 工厂类
class Factory { public Product createProduct(String type) { if (type.equals(product1)) { return new ConcreteProduct1(); } else if (type.equals(product2)) { return new ConcreteProduct2(); } else { throw new IllegalArgumentException(无效的产品类型); } }
} // 客户端代码
public class Client { public static void main(String[] args) { Factory factory new Factory(); Product product1 factory.createProduct(product1); product1.use(); // 输出使用具体产品1 Product product2 factory.createProduct(product2); product2.use(); // 输出使用具体产品2 }
} 七、PHP简单工厂模式
以下是一个示例展示了如何在PHP中实现简单工厂模式
?php // 产品接口
interface Product { public function useProduct();
} // 具体产品类 1
class ConcreteProduct1 implements Product { public function useProduct() { echo 使用具体产品1\n; }
} // 具体产品类 2
class ConcreteProduct2 implements Product { public function useProduct() { echo 使用具体产品2\n; }
} // 工厂类
class Factory { public static function createProduct($type) { if ($type product1) { return new ConcreteProduct1(); } elseif ($type product2) { return new ConcreteProduct2(); } else { throw new Exception(无效的产品类型); } }
} // 客户端代码
function clientCode() { $product1 Factory::createProduct(product1); $product1-useProduct(); // 输出使用具体产品1 $product2 Factory::createProduct(product2); $product2-useProduct(); // 输出使用具体产品2
} // 调用客户端代码
clientCode();
?
《完结》