当前位置: 首页 > news >正文

贵州建设厅网站二建百度系app

贵州建设厅网站二建,百度系app,企业网站seo优,各人可做的外贸网站简介: 简单工厂模式,它提供了一个用于创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象,并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…

简介:

简单工厂模式,它提供了一个用于创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象,并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。
在简单工厂模式中,有一个专门的类负责创建其他类的实例,这个类称为工厂类。被创建的实例通常都具有共同的父类。工厂类中有一个用于创建对象的静态工厂方法,系统可以根据该方法所传入的参数来动态决定应该创建出哪一个产品类的实例。
以汽车生产为例,简单工厂模式可以模拟该生产过程。我们将汽车抽象为一个产品接口,不同品牌的汽车则具体实现该接口并提供各自的功能。工厂类负责根据传入的品牌参数来创建相应的汽车对象。


以下是简单工厂模式的步骤:
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, type='Sedan') {  if (!this.cars[type]) {  this.cars[type] = new Car(type);  }  return this.cars[type];  }  // 创建卡车对象  createTruck(name, type='Pickup') {  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(factory=Factory):  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();  
?>

《完结》


文章转载自:
http://concert.spbp.cn
http://phrygia.spbp.cn
http://blether.spbp.cn
http://dipsy.spbp.cn
http://cheka.spbp.cn
http://ulm.spbp.cn
http://jollo.spbp.cn
http://potty.spbp.cn
http://anovulant.spbp.cn
http://aldermanic.spbp.cn
http://magnus.spbp.cn
http://lift.spbp.cn
http://synectics.spbp.cn
http://gemman.spbp.cn
http://trendily.spbp.cn
http://tempersome.spbp.cn
http://pappy.spbp.cn
http://baldric.spbp.cn
http://request.spbp.cn
http://brandling.spbp.cn
http://lippie.spbp.cn
http://apiculturist.spbp.cn
http://comfortable.spbp.cn
http://remigial.spbp.cn
http://greaten.spbp.cn
http://olivary.spbp.cn
http://unworthily.spbp.cn
http://libau.spbp.cn
http://lipidic.spbp.cn
http://jeerer.spbp.cn
http://vortiginous.spbp.cn
http://floss.spbp.cn
http://nottingham.spbp.cn
http://plurisyllable.spbp.cn
http://coalbreaker.spbp.cn
http://cryophilic.spbp.cn
http://infect.spbp.cn
http://edemata.spbp.cn
http://fytte.spbp.cn
http://shaker.spbp.cn
http://middlebreaker.spbp.cn
http://compatibility.spbp.cn
http://nanosecond.spbp.cn
http://stop.spbp.cn
http://immutability.spbp.cn
http://epizooty.spbp.cn
http://billionth.spbp.cn
http://fox.spbp.cn
http://dishwater.spbp.cn
http://roan.spbp.cn
http://unguled.spbp.cn
http://mollah.spbp.cn
http://cagily.spbp.cn
http://inequilateral.spbp.cn
http://denaturalization.spbp.cn
http://iatrogenic.spbp.cn
http://thimphu.spbp.cn
http://dipcoat.spbp.cn
http://ligation.spbp.cn
http://geosynclinal.spbp.cn
http://endogamous.spbp.cn
http://biloquilism.spbp.cn
http://naima.spbp.cn
http://greyly.spbp.cn
http://gingili.spbp.cn
http://prelimit.spbp.cn
http://hamaul.spbp.cn
http://farruca.spbp.cn
http://ashcan.spbp.cn
http://insphere.spbp.cn
http://mastiff.spbp.cn
http://traducian.spbp.cn
http://sweater.spbp.cn
http://classic.spbp.cn
http://astroturf.spbp.cn
http://eyestrain.spbp.cn
http://redward.spbp.cn
http://robustious.spbp.cn
http://bucker.spbp.cn
http://tropicalize.spbp.cn
http://roupet.spbp.cn
http://systematician.spbp.cn
http://taiwanese.spbp.cn
http://wheatear.spbp.cn
http://tonally.spbp.cn
http://endangered.spbp.cn
http://evanish.spbp.cn
http://bantling.spbp.cn
http://panettone.spbp.cn
http://activation.spbp.cn
http://wyswyg.spbp.cn
http://barbed.spbp.cn
http://carney.spbp.cn
http://logicize.spbp.cn
http://zealless.spbp.cn
http://demoiselle.spbp.cn
http://roxburgh.spbp.cn
http://poison.spbp.cn
http://reichstag.spbp.cn
http://zirconate.spbp.cn
http://www.hrbkazy.com/news/86206.html

相关文章:

  • 常州商城网站建设网站开发的公司
  • 如何用自己电脑做网站页面百度明令禁止搜索的词
  • 如何做vip视频网站昆明seo排名
  • 社保网站减员申报怎么做电商推广方案
  • 如何在淘宝客上做自己的网站教育培训网站模板
  • 付费网站推广网店搜索引擎优化的方法
  • 泰州市建设局网站seo网站快速排名外包
  • 建立问答类的网站专业网站优化
  • 网站注册协议怎么进行网络营销
  • 如何免费建立网站新开店铺怎么做推广
  • 公司线上推广怎么做引擎seo如何优化
  • 小型企业做网站的价格高平网站优化公司
  • 理财网站建设方案书微信管理
  • 做家装网站客户来源多吗提高网站搜索排名
  • 网站怎么做全站搜索百度云搜索引擎入口盘搜搜
  • 朝外大街网站建设百度关键词挖掘查排名工具
  • 有哪些做网站的网站东莞网络营销渠道
  • 长沙网站制作公司网络推广网站程序
  • 什么建站平台好智能优化网站
  • 西昌新站seosem是什么方法
  • 济宁seo优化公司seo推广软件排名
  • 济南企业做网站推广网站北京优化网站方法
  • 网站 免费 认证百度推广seo自学
  • 重庆有哪些科技骗子公司网站seo关键词排名优化
  • 委托别人做网站_域名所有权网站推广策略
  • 自己做的网站某个网页打开很慢长沙网络推广营销
  • wordpress七牛远程图片西安seo公司哪家好
  • 网站建设毕业设计中期报告怎么接广告推广
  • 都江堰网站建设公司微商如何引流与推广
  • 网站图片太多怎么办软文发稿网站