摘要:他們兩個互相獨立,不會影響到對方對于兩個獨立變化的維度,使用橋接模式再適合不過了。
橋接設計模式
橋接設計模式是許多其他設計模式的基礎,比如裝飾模式, 代理模式都或多或少看到他的影子, 在面向對象設計中最重要的一個特點就是繼承, 然而作為拓展類的功能的方式有兩種 -- 繼承和橋接, 橋接用我簡單的理解就是放棄使用繼承的方式拓展類, 而是采用包含另一個具有一定功能的對象來拓展類, 下面來看兩種結構
首先我們假設有一個需求, 有一個圖形接口, 然后有長方形, 正方形, 圓形等圖形類, 我們需要各種顏色的圖形, 下面用繼承和橋接的方式來實現(xiàn)這種需求.
繼承
橋接
橋接模式結構 實現(xiàn)
圖形抽象類
let Shape = function(color) { this.color = color; }; Shape.prototype.setColor = function(color) { this.color = color; }; Shape.prototype.draw = function() { new Error(); }
圖形類
let Rectangle = function (color) { Shape.call(this, color); }; extend(Rectangle, Shape); Rectangle.prototype.draw = function () { color.bepaint("長方形"); }; let Square = function (color) { Shape.call(this, color); }; extend(Square, Shape); Square.prototype.draw = function () { color.bepaint("正方形"); } let Circle = function (color) { Shape.call(this, color); }; extend(Circle, Shape); Circle.prototype.draw = function () { color.bepaint("圓型"); };
顏色抽象類
let Color = function() { }; Shape.prototype.bepaint = function() { new Error(); };
顏色類
let Red = function () { Color.call(this); }; extend(Red, Color); Red.prototype.bepaint = function(shape) { console.log("白色的" + shape); }; let Green = function () { Color.call(this); }; extend(Green, Color); Green.prototype.bepaint = function(shape) { console.log("綠色的" + shape); }; let Blue = function () { Color.call(this); }; extend(Blue, Color); Blue.prototype.bepaint = function(shape) { console.log("藍色的" + shape); };
使用
let red = new Red(); //正方形 let square = new Square(); //紅色的正方形 square.setColor(red); square.draw(); //長方形 let rectange = new Rectangle(); //紅色長方形 rectange.setColor(red); rectange.draw();
橋式設計適用于一個類存在兩個或多個獨立變化的維度,且這兩個維度都需要進行擴展,
橋接模式實現(xiàn)了抽象化與實現(xiàn)化的脫耦。他們兩個互相獨立,不會影響到對方, 對于兩個獨立變化的維度,使用橋接模式再適合不過了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107559.html
摘要:更多前端技術和知識點,搜索訂閱號菌訂閱橋接模式實際上就是將邏輯抽象和具體的實現(xiàn)分離。以追加字符串到文件中為例代碼從變?yōu)樯厦娲a是讀取某個文件并在文件中追加字符串,最后調用回調函數(shù)。請關注我的訂閱號,不定期推送有關的技術文章,只談技術不談八卦 showImg(https://segmentfault.com/img/remote/1460000020002974?w=640&h=426)...
閱讀 3066·2023-04-25 18:54
閱讀 2591·2021-11-02 14:40
閱讀 3176·2021-09-23 11:58
閱讀 2424·2019-08-30 13:50
閱讀 1231·2019-08-29 12:46
閱讀 3117·2019-08-28 17:51
閱讀 679·2019-08-26 11:47
閱讀 897·2019-08-23 16:17