简单工厂模式,构造函数模式,原型模式相关


    1.简单工厂模式  :无法确定对象类型    2.构造函数模式  :私有话的问题    3.原型模式
        // 1简单工厂模式        function CreatPerson(name,age,sex){            var obj=new Object();            obj.name=name;            obj.age=age;            obj.sex=sex;            obj.sayName=function(){                console.log("姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex);            };            return obj;

        }        var person1=CreatPerson("iwen",20,"男人");        person1.sayName();        var person2=CreatPerson("ime",22,"女人");        person1.sayName();        /*         * 函数CreatePerson能够根绝传入的参数构建不同的对象,并且可以保存对象的必要信息         * 每一个对象保存的信息都是独立的。         * 问题:person1和person2对象能知道是什么类型么?他属于谁?         *         * typeof instanceof         *         * */

        /*         *         * 构造函数模式         * 在javascript中,构造函数可以用来创建特定类型的对象         * Object,Array本身用的就是构造函数模式创建的         *         * */

        function Person(name,age,sex){         this.name = name;         this.age = age;         this.sex =sex;         this.sayName = function(){         console.log("姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex);             }         }

         var person1 = new Person("iwen","19.8","男");         var person2= new Person("ime","200.8","男");         person1.sayName();         person2.sayName();

//        * 在当前这个例子中,Person取代了CreatePerson,Person中的代码//        * 除了与CreatePerson中相同的部分,不同的点//        * 1.没有显示的创建对象//        * 2.直接将属性和方法赋值给this对象//        * 3.没有return对象//        *//        * 在构造函数中,我们需要使用关键字new去创建对象//        * 在我们通过new创建对象的时候,会经历四个步骤//        * 1.创建新的对象//        * 2.将构造函数的作用域赋值给新的对象//        * 3.执行构造函数中的代码(为这个新的对象添加属性和方法)//        * 4.返回新的对象//        *//        *  person1 和 person2 两个对象都有一个constructor(构造函数),而且这个属性都指向Person//        *//        *//        * 只有构造函数才存在constructor

//////        * 任何函数只要通过关键字new来调用,都可以看成是构造函数模式//        * 任何函数也都可以通过赋值的形式进行调用

        /*         *         * 原型模式:         *         * */

        function Person(name,age){            this.name = name;  // 私有属性和方法            this.age = age;            this.oldSayName = function(){

            }        }

        //并没有挂载在window身上,而是挂载原型身上        Person.prototype.sayName = function(){   //公共方法            console.log("姓名:"+this.name+" 年龄:"+this.age);        };

        var person1 = new Person("iwen","20");        var person2 = new Person("heihie","21");        //    person1.sayName();        //    person2.sayName();        Person.prototype.sex = "男";        person1.sex = "女";        console.log(person1.sex);        console.log(person2.sex);

        console.log(person1.sayName === person2.sayName);        console.log(person1.oldSayName === person2.oldSayName);

        console.log(person1.sex === person2.sex);

        //原型模式还是存在一定的问题,如果存在多个原型链,可以继续优化

        function Fn(num1,num2){            this.num1=num1;            this.num2=num2;        }        var pro=Fn.prototype;        console.log(pro);        Fn.prototype={            num3:function(){                console.log("我是三");            },            num4:function(){                console.log("我是四");            },            reset:function(){                for(var key in pro){                    this[key]=pro[key];                }            },            constructor:Fn        };        console.log( Fn.prototype);
时间: 2024-07-28 14:10:52

简单工厂模式,构造函数模式,原型模式相关的相关文章

设计模式的征途—2.简单工厂(Simple Factory)模式

工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应用地比较频繁.此外,工厂方法模式还有一位“大哥”—抽象工厂模式,会在后面进行介绍. 简单工厂模式(Singleton) 学习难度:★★☆☆☆ 使用频率:★★★☆☆ 一.从一个图表库谈起 M公司想要基于C#语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图标,例如柱状图.饼状图或折线图等.

基于上一篇的模块化思路,巩固个小知识点——构造函数与原型模式

具体可参考红皮书第三版中的6.2.4章 书中的例题详细讲解了什么是原型模式 function fop(){}; fop.prototype.name="xiaohong"; fop.prototype.age="12"; fop.prototype.sayName=function(){ console.log(this.name); } var per1=new fop(); per1.sayName(); var per2=new fop(); per2.say

简单工厂(Simple Pattern)模式

一.简单工厂(Simple Factory)模式 Simple Factory 模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Factory 模式实际上不是 Gof 23个设计模式中的一员. 二. 简单工厂(Simple Factory)模式角色与结构 工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象. 抽象产品角色Product (Light):

《JAVA与模式》之原型模式(转载)

原型模式其实就是java的拷贝机制 原文出处:http://blog.csdn.net/zhengzhb/article/details/7393528   定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.Prototype类需要具备以下两个条件: 实现Cloneable接口.在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实

NET设计模式 第二部分 创建型模式(5):原型模式(Prototype Pattern)

原型模式(Prototype Pattern) ——.NET设计模式系列之六 Terrylee,2006年1月 概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构.这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适.那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 结构图 Prototype模式结构图 生活中的例子 Pr

javascript--面向对象(二、工厂模式,构造函数,原型模式)

一.前言 上一篇介绍了对象的基本简单的概念和对象的数据属性和访问器属性,以及对这两种属性类型的一些操作,接来说一下与创建对象的模式. 二.创建对象的方式 (1)工厂模式 这种模式就是通过创建一个Object对象,并将属性和方法保存在Object对象中,将Object对象返回. function createPerson(name, age, job){ var obj = new Object();//通过创建Object来保存传递进来的属性 obj.name = name; obj.age =

面向对象编程-基础(工厂、构造函数、原型、混合、动态等模式)

本文参考:js高级程序设计 第三版这篇文章我啃了大半天写的,是很烦,没有毅力看下去的注定还是不会(1).工厂模式:封装一个函数createPerson,这个函数可以创造一个人对象,包含三个属性和一个方法,然后利用这个函数分别创建了2个对象p1,p2. function createPerson(name,age,job){ var p=new Object(); p.name=name; p.age=age; p.job=job; p.showName=function(){ alert(thi

7中创建对象的方式(工厂模式、构造函数模式、原型模式、动态原型模式等分析)

1.工厂模式 // 定义工厂函数 function createPerson(name, age, hobby) { // 创建一个临时object对象 var obj = new Object(); // 将工厂函数的参数赋值给临时对象 obj.name = name; obj.age = age; obj.hobby = hobby; obj.sayName = function() { console.log("我的名字叫:"+this.name); } // 返回这个包装好的临

组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)

function Bird(name, age) {     this.name = name;     this.age = age;     this.sons = ["Tom", "John"];     //在sayName()方法不存在的情况下,添加到原型中     if (typeof this.sayName != "function") {         Bird.prototype.sayname = function() {

springboot 响应消息 message简单封装 单例和原型模式

直接上代码: 1.定义静态方法 import com.alibaba.fastjson.JSON; public class MessageUtils implements Cloneable { private static final MessageUtils instance = new MessageUtils(); // 单例模式 public MessageUtils clone() { try { return (MessageUtils) super.clone(); } cat