JsDesignMode第二篇

本文深入探讨了创建型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。每种模式都详细介绍了其原理、应用场景及其实现方式。

创建型设计模式
    处理对象创建的设计模式,控制对象的创建来避免基本对象创建时
    可能导致设计上的问题或增加设计上的复杂度
1.简单工厂模式
       1.1也称为静态工厂方法
             由一个工厂对象决定创建某一种产品对象类的实例,创建同一类对象
       1.2类太多,提供一个
            

 //封装在一个函数中,只需要记住这个函数,不需要知道基类
 //这个函数被称为工厂函数,这个模式叫简单工厂模式
        var LoginAlert = function(text){
            this.content = text;
        }
        LoginAlert.prototype.show = function(){
            //显示警示框
        }
        var LoginConfirm = function(text){
            this.content = text;
        }
        LoginConfirm.prototype.show = function(){
            //显示确认框
        }
        var LoginPrompt = function(text){
            this.content = text;
        }
        LoginPrompt.prototype.show = function(){
            //显示提示框
        }
        工厂:
        var PopFactory = function(name){
            switch(name){
                case 'alert':
                    return new LoginAlert();
                case 'confirm':
                    return new LoginConfirm();
                case 'prompt':
                    return new LoginPrompt();
            }
        }


       1.3.上面是对不同的类进行实例化,简单工厂模式的理念是创建对象
                     提取相似的东西,不相似的针对性处理
     

   function createPop(type, text){
            var o = new Object();
            o.content = text;
            o.show = function(){
                //显示方法
            };
            if(type == 'alert'){
                //警示框
            }
            if(type == 'confirm'){
                //确认框
            }
            if(type == 'prompt'){
                //提示框
            }
        }


     1.4区别
                 第一种是通过类实例化来创建
                       继承同一父类,父类原型上的方法是可以共用的
                第二种是创建一个新对象然后包装增强其属性和功能来实现
                      创建了一个新个体,方法也就不能共用了
2.工厂方法模式
        2.1对产品类的抽象使其创建业务主要负责用于创建多类产品的实例
             只需要添加一个类
             看作一个实例化对象的工厂类,将创建对象的基类放在工厂方法类的原型当中
             安全模式:避免错误,比如未使用new
      

  var Factory = function(type, content){
            if(this instanceof Factory){
                var s = new this[type](content);
                return s;
            }else{
                return new Factory(type, content);
            }
        }
        Factory.prototype = {
            Java : function(content){
                //...
            },
            JavaScript : function(content){
                //...
            }
        }; 

 
3.抽象工厂模式

         对类的工厂抽象使其业务用于对产品类族的创建
4.建造者模式
         将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示
         关心于创建这个对象的整个过程,甚至每一个细节
       

var Human = function(param){
            this.skill = param && param.skill || '保密';
            this.hobby = param && param.hobby || '保密';
        }
        Human.prototype = {
            getSkill : function(){
                return this.skill;
            },
            getHobby : function(){
                return this.hobby;
            }
        }
        var Named = function(name){
            var that = this;
            (function(name, that){
                that.wholeName = name;
                if(name.indexOf('') > -1){
                    that.FirstName = name.slice(0, name.indexOf(''));
                    that.SecondName = name.slice(name.indexOf(''));
                }
            })(name, that);
        }
        var Work = function(work){
            var that = this;
            (function(work, that){
                switch(work){
                    case 'code':
                        that.work = '工程师';
                        that.workDescript = '每天编程';
                        break;
                    case 'UI':
                    case 'UE':
                        that.work = '设计师';
                        that.workDescript = '设计更似一种艺术';
                        break;
                    default:
                        that.work = work;
                        that.workDescript = 'NOT FOUND';
                }
            })(work, that);
        }
        Work.prototype.changeWork = function(work){
            this.work = work;
        }
        Work.prototype.changeDescript = function(setence){
            this.workDescript = sentence;
        }
        //建造者类
        var Person = function(name, work){
            var _person = new Human();
            _person.name = new Named(name);
            _person.work = new Work(work);
            return _person;
        }


5.原型模式
        用原型实例指向创建对象的类,使用于创建新的对象的类共享原型对象的属性和方法
        将可复用、可共享、耗时大的从基类中提出来然后放在原型之中
        然后子类将方法和属性继承下来,对于那些需要重写的方法进行重写
        既有了自己的属性和方法又有了原型的属性和方法
6.单例模式
        只允许实例化一次的对象类,只存在一个对象
        为一个对象规划一个命名空间,来井井有条的管理对象上的属性和方法
        为了代码易懂,采用语义化,但是能用的词是有限的,很容易重复
        可以使用命名空间来约束每个人定义的变量
        比如常见的jQuery使用它的方法必须使用它的命名空间
   

     var A = {
            Util : {
                util_method1 : function(){},
                util_method2 : function(){}
                //...
            },
            Tool : {
                tool_method1 : function(){},
                tool_method2 : function(){}
                //...
            },
            Ajax : {
                get : function(){},
                post : function(){}
                //...
            }
        }

 

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值