简单了解oop编程思想和常见的几种设计模式
簡單了解面向?qū)ο缶幊?#xff08;oop)和常見的幾種設(shè)計模式
背景:
1、軟件設(shè)計開發(fā)過程中疑難問題:
- 軟件復(fù)雜龐大
- 難以維護(hù)
- 版本迭代需求變更
軟件設(shè)計開發(fā)中存在很多其他的問題,上面只是從程序開發(fā)和設(shè)計的角度看到的部分問題。需求解決上面軟件開發(fā)中的問題,就要求我們編寫(設(shè)計)的軟件具有很好的可讀性、可維護(hù)性和可擴(kuò)展性。我們需要保證代碼具有高內(nèi)聚低耦合,這里我們使用了OOP編程思想。
oop四大基本特性:
-
抽象:提取現(xiàn)實(shí)世界中某事物的關(guān)鍵特性,為該事物構(gòu)建模型的過程。對同一事物在不同的需求下,需要提取的特性可能不一樣。得到的抽象模型中一般包含:屬性(數(shù)據(jù))和操作(行為)。這個抽象模型我們稱之為類。對類進(jìn)行實(shí)例化得到對象。
-
封裝:封裝可以使類具有獨(dú)立性和隔離性;保證類的高內(nèi)聚。只暴露給類外部或者子類必須的屬性和操作。類封裝的實(shí)現(xiàn)依賴類的修飾符(public、protected和private等)
-
繼承:對現(xiàn)有類的一種復(fù)用機(jī)制。一個類如果繼承現(xiàn)有的類,則這個類將擁有被繼承類的所有非私有特性(屬性和操作)。這里指的繼承包含:類的繼承和接口的實(shí)現(xiàn)。
-
多態(tài):多態(tài)是在繼承的基礎(chǔ)上實(shí)現(xiàn)的。多態(tài)的三個要素:繼承、重寫和父類引用指向子類對象。父類引用指向不同的子類對象時,調(diào)用相同的方法,呈現(xiàn)出不同的行為;就是類多態(tài)特性。多態(tài)可以分成編譯時多態(tài)和運(yùn)行時多態(tài)。
24種設(shè)計模式:
常見的幾種設(shè)計模式:
1、構(gòu)造函數(shù)模式
/*** 構(gòu)造一個動物的函數(shù) */ function Animal(name, color){this.name = name;this.color = color;this.getName = function(){return this.name;} } // 實(shí)例一個對象 var cat = new Animal('貓', '白色'); console.log( cat.getName() );2、工廠模式
/*** 工廠模式*/ function Animal(opts){var obj = new Object();obj.name = opts.name;obj.color = opts.color;obj.getInfo = function(){return '名稱:'+obj.name +', 顏色:'+ obj.color;}return obj; } var cat = Animal({name: '波斯貓', color: '白色'}); cat.getInfo();3、模塊模式
/*** 模塊模式 = 封裝大部分代碼,只暴露必需接口*/ var Car = (function(){var name = '法拉利';function sayName(){console.log( name );}function getColor(name){console.log( name );}return {name: sayName,color: getColor} })(); Car.name(); Car.color('紅色');4、混合模式
/*** 混合模式 = 原型模式 + 構(gòu)造函數(shù)模式*/ function Animal(name, color){this.name = name;this.color = color;console.log( this.name + this.color) }Animal.prototype.getInfo = function(){console.log('名稱:'+ this.name); }function largeCat(name, color){Animal.call(null, name, color);this.color = color; }largeCat.prototype = create(Animal.prototype); function create (parentObj){function F(){}F.prototype = parentObj;return new F(); };largeCat.prototype.getColor = function(){return this.color; } var cat = new largeCat("Persian", "白色"); console.log( cat )5、單例模式
/*** 在執(zhí)行當(dāng)前 Single 只獲得唯一一個對象*/ var Single = (function(){var instance;function init() {//define private methods and properties//do somethingreturn {//define public methods and properties};}return {// 獲取實(shí)例getInstance:function(){if(!instance){instance = init();}return instance;}} })();var obj1 = Single.getInstance(); var obj2 = Single.getInstance();console.log(obj1 === obj2);6、發(fā)布訂閱模式
/*** 發(fā)布訂閱模式*/ var EventCenter = (function(){var events = {};/*{my_event: [{handler: function(data){xxx}}, {handler: function(data){yyy}}]}*/// 綁定事件 添加回調(diào)function on(evt, handler){events[evt] = events[evt] || [];events[evt].push({handler:handler})}function fire(evt, arg){if(!events[evt]){return }for(var i=0; i < events[evt].length; i++){events[evt][i].handler(arg);}}function off(evt){delete events[evt];}return {on:on,fire:fire,off:off} }());var number = 1; EventCenter.on('click', function(data){console.log('click 事件' + data + number++ +'次'); }); EventCenter.off('click'); // 只綁定一次 EventCenter.on('click', function(data){console.log('click 事件' + data + number++ +'次'); });EventCenter.fire('click', '綁定');總結(jié)
以上是生活随笔為你收集整理的简单了解oop编程思想和常见的几种设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ImportError: libpq.s
- 下一篇: 全自动采集小说源码