javascript设计模式(工厂模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/running_shuai/article/details/88685455

javascript设计模式

Web2.qq.com. web2.0兴起的时候,(2019年1月1日已经下架)
map.baidu.com
编程功底,性能优化,html5游戏(取代flash)

1、设计模式概念

 (1)文字解读:反复使用,思想成熟,经过分类,无数实战设计经验总结的。
       为了代码可复用,可扩展 可解耦,可维护,更好的被人理解且保证代码可靠。
       代码开发工程化。
 (2)拟物化解读:分类书柜,编程开发语言是由人设计的,要跟生活和经验相结合。

2、设计模式的发展以及在javascript中的使用

  发展:四人帮,简称gof,设计模式的圣经。
 javascript的使用:
        面向对象编程:原来没有class这个关键字

3、设计原则: 站在巨人的肩膀上蒸屉hold系统架构

    (1)开闭原则:对扩展开放,对修改关闭,拟物(高考试卷,可以扩展题目,但不可修改题目)
    (2)里氏转换原则:子类继承父类,单独调用完全可以,拟物(盗版光盘,完全可以单独用)
    (3)依赖倒转原则:引用一个对象,如果这个对象有底层类型,直接饮用底层。
    拟物(和尚打水,完全可以直接把井里的水杯回家,单你非要中间把水打出来放进一个桶里插一步)
    (4)接口隔离原则:每一个接口都应该是一种角色,拟物(汽车的usb接口,只提供单5一功能)
    (5)合成复用原则:新的对象应使用一些已有的对象,使之成为新对象的一部分。拟物(
    手机有些相机零件,没必要再买个新相机)。
   (6)迪米特原则(最小知道原则):一个对象应该对其他对象有可能少的了解。拟物(现实中的对象)

4、工厂模式:

    (1)解读
	      文字解读:
	           定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。这种模式将类的实例化
	           推迟给了子类。而子类可以重写接口以便创建的时候制定自己的对象类型(抽象工厂)
          拟物化解读:现实中的总工厂,有做衣服的子厂,有做鞋的子厂,我的总工厂给厂长留一个接口
          用户跟厂长沟通,你要用工厂产什么东西,我是厂长,我去告诉下面的子厂做什么样的事情。是在厂
          长用的时候,才开始找对应的子厂生产相应的产品。这个工厂只要暴漏出来一个接口,可以造鞋,我
          可以添加工艺造一个小工厂,只要你提供原材料,这个就叫做抽象工厂。
    (2)作用以及注意事项
             对象的构建十分复杂。 对于我们一个人来说,我们想要双鞋,自己做特别复杂,我们只要跟厂长说我要做鞋,厂长代理子厂开始工作,给我们做鞋,如果不满意我们可以提供工艺,做一双我们想要的鞋。
            需要依赖具体的环境创建不同的实例。跟厂长沟通,我现在的鞋是什么样的场景,就会选择不同的子厂。
            处理大量具有相同属性的小对象。我要一双鞋,一卡车运一双鞋。不科学,我要一批鞋,用卡车运,科学。考虑用工厂帮我们解决。
          注意事项:
          不能滥用工厂,增加代码复杂度
    (3)实际应用
         创建对象的流程赋值的时候,比如依赖很多配置文件。
       (4)面向对象代码实现:
       ```javascript
        <script>
   
       //  简单工厂工厂应该有厂长,(接口,消费者==子类)来决定到底运行那条产品线,即子类决定具体实例化哪个类。
           var factory = {};
                factory.generateShoes = function (){
			this.people = 50;
                              alert(‘我们有’+this.people)
	   }
                factory.generateClothes = function () {
			
	   }
               factory.generateCars = function () {
			
	   }
                factory.manager = function (prarms) {
                       // 工厂单例, 构造器模式
			return new factory[params]
	   }
               var me = factory.manager(‘generateShoes’)
   </script>

抽象工厂(覆盖掉原来的工厂)

```javascript
 
 <script>
         
             var factory = {};       // 这是一个抽象工厂模式
                  factory.prototype = {
                               // 抽象工厂对象的原型上有个创建工厂的方法,它不能被实例化,只能用来派生子类(继承的模式) 
  		 	createFactory: function (){       // 这是留出来的一个口子,
  					return new Error(’this is an abstract class’)
  			}
  	   }
                  继承工厂的属性和方法:
                 var factoryHander = function (){
  		factory.call(this)
  	   }     
                 factoryHander.prototype = new factory();
                 factoryHander.prototype.constructor = factory;
                 factoryHander.prototype.createFactory = function (){
              			 // 重新定义接口
  	  }	  
</script>

猜你喜欢

转载自blog.csdn.net/running_shuai/article/details/88685455
今日推荐