日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单了解oop编程思想和常见的几种设计模式

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单了解oop编程思想和常见的几种设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單了解面向對象編程(oop)和常見的幾種設計模式

背景:

1、軟件設計開發過程中疑難問題:

  • 軟件復雜龐大
  • 難以維護
  • 版本迭代需求變更

軟件設計開發中存在很多其他的問題,上面只是從程序開發和設計的角度看到的部分問題。需求解決上面軟件開發中的問題,就要求我們編寫(設計)的軟件具有很好的可讀性、可維護性和可擴展性。我們需要保證代碼具有高內聚低耦合,這里我們使用了OOP編程思想。

oop四大基本特性:

  • 抽象:提取現實世界中某事物的關鍵特性,為該事物構建模型的過程。對同一事物在不同的需求下,需要提取的特性可能不一樣。得到的抽象模型中一般包含:屬性(數據)和操作(行為)。這個抽象模型我們稱之為類。對類進行實例化得到對象。

  • 封裝:封裝可以使類具有獨立性和隔離性;保證類的高內聚。只暴露給類外部或者子類必須的屬性和操作。類封裝的實現依賴類的修飾符(public、protected和private等)

  • 繼承:對現有類的一種復用機制。一個類如果繼承現有的類,則這個類將擁有被繼承類的所有非私有特性(屬性和操作)。這里指的繼承包含:類的繼承和接口的實現。

  • 多態:多態是在繼承的基礎上實現的。多態的三個要素:繼承、重寫和父類引用指向子類對象。父類引用指向不同的子類對象時,調用相同的方法,呈現出不同的行為;就是類多態特性。多態可以分成編譯時多態和運行時多態。

24種設計模式:

常見的幾種設計模式:

1、構造函數模式

/*** 構造一個動物的函數 */ function Animal(name, color){this.name = name;this.color = color;this.getName = function(){return this.name;} } // 實例一個對象 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、混合模式

/*** 混合模式 = 原型模式 + 構造函數模式*/ 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、單例模式

/*** 在執行當前 Single 只獲得唯一一個對象*/ var Single = (function(){var instance;function init() {//define private methods and properties//do somethingreturn {//define public methods and properties};}return {// 獲取實例getInstance:function(){if(!instance){instance = init();}return instance;}} })();var obj1 = Single.getInstance(); var obj2 = Single.getInstance();console.log(obj1 === obj2);

6、發布訂閱模式

/*** 發布訂閱模式*/ var EventCenter = (function(){var events = {};/*{my_event: [{handler: function(data){xxx}}, {handler: function(data){yyy}}]}*/// 綁定事件 添加回調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', '綁定');

總結

以上是生活随笔為你收集整理的简单了解oop编程思想和常见的几种设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。