这篇文章主要介绍打印稿的5种设计模式分别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
设计模式是可以帮助开发人员解决问题的模板。在本中涉及的模式太多了,而且它们往往针对不同的需求。但是,它们可以被分为三个不同的组:
- <李> <强>结构模式>强处理不同组件(或类)之间的关系,并形成新的结构,以提供新的功能。结构模式的例子有<代码>复合代码>,<代码>适配器代码>和<代码>装饰> 代码。李> <李> <强>行为模式强>将组件之间的公共行为抽象成一个独立的实体。行为模式的例子有命令,策略和我个人最喜欢的一个:<代码>观察者模式> 代码。李> <>李创建模式专注于类的实例化,让我们更容易创建新的实体。我说的是工厂方法,单例和抽象工厂。李>
<强>单例模式强>
单例模式可能是最著名的设计模式之一。它是一种创建模式,因为它确保无论我们尝试实例化一个类多少次,我们都只有一个可用的实例。
处理数据库连接之类的可以单例模式,因为我们希望一次只处理一个,而不必在每个用户请求时重新连接。
类MyDBConn { 保护静态实例:MyDBConn | null=零 私人id:数量=0 构造函数(){ 这一点。id=math . random () } 公共getID():{数量 返回this.id } 公共静态getInstance (): MyDBConn { 如果(! MyDBConn.instance) { MyDBConn。实例=new MyDBConn () } 返回MyDBConn.instance } } const连接=[ MyDBConn.getInstance (), MyDBConn.getInstance (), MyDBConn.getInstance (), MyDBConn.getInstance (), MyDBConn.getInstance () ] 连接。forEach (c=比;{ console.log (c.getID ()) })
现在,虽然不能直接实例化类,但是使用<代码> getInstance 代码>方法,可以确保不会有多个实例。在上面的示例中,可以看到包装数据库连接的伪类如何从该模式中获益。
这个事例展示了无论我们调用<代码> getInstance 代码>方法多少次,这个连接总是相同的。
上面的运行结果:
0.4047087250990713 0.4047087250990713 0.4047087250990713 0.4047087250990713 0.4047087250990713
<>强工厂模式强>
<代码>工厂模式> 代码是一种创建模式,就像<代码>单例模式代码>一样。但是,这个模式并不直接在我们关心的对象上工作,而是只负责管理它的创建。
解释一下:假设我们通过编写代码来模拟移动车辆,车有很多类型,例如汽车,自行车和飞机,移动代码应该封装在每个<代码>工具> 代码类中,但是调用它们的<代码> 代码>移动方法的代码可以是通用的。
这里的问题是如何处理对象创建?可以有一个具有3个方法的单一<代码> 代码>类创造者,或者一个接收参数的方法。在任何一种情况下,扩展该逻辑以支持创建更多<代码> vehices> 代码都需要不断增长相同的类。
但是,如果决定使用工厂方法模式,则可以执行以下操作:
现在,创建新对象所需的代码被封装到一个新类中,每个类对应一个车辆类型。这确保了如果将来需要添加车辆,只需要添加一个新类,而不需要修改任何已经存在的东西。
接着来看看,我们如何使用<代码> 代码>手稿来实现这一点:
界面车辆{ 移动():空白 } 类汽车实现车辆{ 公共移动():空白{ console.log(“移动车!“) } } 类自行车实现车辆{ 公共移动():空白{ console.log(“移动自行车!“) } } 类飞机实现车辆{ 公共移动():空白{ console.log(“飞行飞机!“) } }//VehicleHandler是“抽象的”,因为没有人会实例化它实例化它//我们要扩展它并实现抽象方法 抽象类VehicleHandler {//这是真正的处理程序需要实现的方法 公共抽象createVehicle():车辆 公共moveVehicle():空白{ const myVehicle=this.createVehicle () myVehicle.move () } } 类PlaneHandler延伸VehicleHandler { 公共createVehicle():车辆{ 返回新飞机() } } 类CarHandler延伸VehicleHandler { 公共createVehicle():车辆{ 返回的新车() } } 类BicycleHandler延伸VehicleHandler { 公共createVehicle():车辆{ 返回新自行车() } }///用户代码…… const飞机=new PlaneHandler () const汽车=new CarHandler () planes.moveVehicle () cars.moveVehicle ()打印稿的5种设计模式分别是什么