smartjs 0.2 OOP講解 - factory

來源:互聯網
上載者:User

標籤:style   class   blog   code   color   get   

本篇介紹OOP的第二個對象factory。在以往項目中其實真正使用klass的地方相當少,而factory則是十分常見的。

在smartjs中的factory並不是指的是原廠模式。在factory要求定義一個基礎對象,這個對象可以是基類,也可以是模板對象或者是介面。然後factory就已此基礎對象為基礎,其他添加或者建立的對象,繼承或者是複製基礎對象的屬性和方法。factory在提供一系列方法來對這些對象做控制。

factory經過簡單的處理可以實現工廠、外觀、模板等設計模式。

介面說明
//多參數介面        st.factory(name, base, proto, type, initDefault)        //參數對象介面        st.factory({            //工廠名            name : "",            //基類對象            base : {},            //工廠的擴充屬性和方法對象            proto:{},            //工廠的類型;預設:類執行個體化後的對象;class:類對象,未執行個體化;merge:對象複製合并            type : "",            //是否將base設定成為預設的對象;當使用factory.get找不到對象時返回預設對象            initDefault:true        })        //建立工廠後的介面說明        //建立產品方法,但不註冊到factory中去,name:產品名稱;item:產品特性;parent:父類名稱        factory.create(name, item, parent)        //添加產品方法,會註冊到factory中去,name:產品名稱;item:產品特性;parent:父類名稱        factory.add(name, item, parent)        //尋找產品方法,name:產品名稱;defaultMode:是否在找不到產品的時候返回預設對象        factory.find(name, defaultMode)        //刪除產品方法,name:產品名稱        factory.remove(name)        //設定預設產品方法,name:產品名稱        factory.setDefault(name)        //執行所有產品的某個方法,fnName:產品的方法名稱;args:參數數組        factory.fire(fnName,args)

 

執行個體代碼
        //widget基類        var baseWidget = {            //widget類型            type: ‘‘,            //widget的渲染方法            render: function(id) {                return this.type + ‘:‘ + id;            }        };        //一個widget工廠        var widgetFactory = st.factory(‘wdigetfactory‘, baseWidget);        //添加一個input        widgetFactory.add(‘input‘, {            type: ‘input‘        })        it("factory add", function() {            //找到添加的input            var input = widgetFactory.find(‘input‘);            expect(input).toBeDefined();            //輸出            expect(input.render(‘txt‘)).toBe("input:txt");        });        it("factory inheirt", function() {            //添加一個number類型的input            var num = widgetFactory.add(‘number‘, {                type: ‘input[number]‘            }, ‘input‘)                        expect(num.render(‘txtNum‘)).toBe("input[number]:txtNum");        });

 

class模式

var f1 = st.factory({                name: ‘classMode‘,                //設定class類型                type: ‘class‘,                base: {                    klassInit: function(name) {                        this.name = name;                    }                }            });            var c1 = f1.add(‘c1‘, {                type: ‘c1‘            });            expect(c1.fn).toBeDefined();            //需要初始化            var c = new c1(‘class1‘);            expect(c.type).toBe("c1");            expect(c.name).toBe("class1");

 

merge

var f2 = st.factory({                name: ‘copyMode‘,                //設定merge類型                type:  ‘merge‘,                //設定預設模式                initDefault: true,                base: {                    name: ‘copy‘,                    project: {                        name: ‘smartjs‘                    }                }            })            var c = f2.add(‘c1‘, {                name: ‘c1‘,                project: {                    role: ‘pm‘                }            });            expect(f2.find().name).toBe("copy");            expect(c.name).toBe("c1");            expect(c.project.name).toBe("smartjs");            expect(c.project.role).toBe("pm");


factory的使用方式還有很多,暫時就不多做介紹了,有機會專門找個專題來介紹具體的使用案列。另外在smartjs後續的內容中,也會大量使用factory。

smartjs 下一版預告,會加入smartjs核心的重要模組:基於策略的資料管理

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.