設(shè)計模式項目應用深入一筆記1

uml類圖

組合關(guān)系和聚合關(guān)系?

組合關(guān)系是,
單位的意義依賴于其他單位,或者整體.
缺少了這個單位,整體無法成為完成的整體,
或者,沒了這個整體,單位沒有獨立的意義?

聚合關(guān)系是,
單位有自己獨立的意義,
沒有整體,沒有其他單位,同樣是有意義的?

無論是組合關(guān)系還是聚合關(guān)系, 應該都是針對單位和單位之間的關(guān)系?

簡書確實不太適合放代碼,
回頭還是要github..
不過我們的主要意義在于筆記.
沒別的大概理解了之后,
自己再抄寫一遍.加深印象,加深理解.

案例代碼
index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewprot" content="width=device-width, initial-scale=1.0"/>
        <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
        <title>dddd</title>
        <style type="text/css">
            
        </style>
    </head>
    <body>
         <!--1. css reset-->
         <!--2. 抽取公共方法 根據(jù)經(jīng)驗 根據(jù)我實現(xiàn)樹立好的類的關(guān)系-->
         
         <script src="commen.js" type="text/javascript" charset="utf-8"></script>
         <script src="initVar.js" type="text/javascript" charset="utf-8"></script>
         <script src="SquareFactoty.js" type="text/javascript" charset="utf-8"></script>
         <script src="Ground.js" type="text/javascript" charset="utf-8"></script>
         
        <script type="text/javascript">
          
        </script>
    </body>
</html>

common.js

var tool = {
  inherit : function (target,origin) {// 繼承
    // 原型的繼承  圣杯模式
    var temp = function () {};
    temp.prototype = origin.prototype;
    target.prototype = new temp();
    target.prototype.constructor = target;
    target.prototype.uper = origin;
  },
  extends : function (origin) {//另一種繼承  
    //繼承函數(shù), 實例又相同, 很巧妙.. 
    var result = function () {
      origin.apply(this,arguments);// 繼承實例
    };
    this.inherit(result, origin);// 繼承原型 
    return result;
  },
  single : function (origin) {// 單例 + 實例繼承 + 原型繼承
    var singleResult = (function () {
        var instance;
        return function () {
          if (typeof instance == 'object') {
            return instance;
          }
          origin && origin.apply(this,arguments);// 繼承實例
            instance = this;
            return instance;
        }
    })();
    origin && this.inherit(singleResult,origin);// 繼承原型
    return singleResult;
  }
}

就這3個繼承,我直接佩服的五體投地.真的是佩服

initVar.js 用來定義一些主要的變量?

// 場景 == 廣場     寬度系數(shù)     高度系數(shù)

var XLEN = 30;
var YLEN = 30;
// 大寫 : 基本不變的量. 游戲運行過程中.


// 方塊 寬高
var SQUAREWIDTH = 20;
var SQUAREHEIGHT = 20;
// 廣場     位置

var BASE_X_POINT = 200;
var BASE_Y_POINT = 100;

// 定義基類

function Square (x, y, width, height,viewContent) {// 傳一個dom元素,用來渲染
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.viewContent = viewContent || document.createElement('div');
}

Square.prototype.touch = function () {
    console.log(0);
}

// 定義子類

var Floor = tool.extends(Square);

var Stone = tool.extends(Square);

var Food = tool.single(Square);

var SnakeHead = tool.single(Square);

var SnakeBody = tool.extends(Square);

var Ground = tool.single(Square);

var Game = tool.single();

Ground.js

var ground = new Ground(BASE_X_POINT,BASE_Y_POINT,XLEN * SQUAREWIDTH,YLEN * SQUAREHEIGHT);


ground.init = function (){
  // 渲染廣場
  this.viewContent.style.position = "absolute";
  this.viewContent.style.backgroundColor = '#0ff';
  this.viewContent.style.left = this.x + 'px';
  this.viewContent.style.top = this.y + 'px';
  this.viewContent.style.width = this.width + 'px';
  this.viewContent.style.height = this.height + 'px';
  document.body.appendChild(this.viewContent);
  
  
  //存儲 管理 廣場中所有方塊對象
  // 二維數(shù)組  // x,y坐標本身是重要的參數(shù)
  this.SquareTable = [];
  
  
  for(var i = 0; i < YLEN;i++) {// 生成了二維數(shù)組.
    this.SquareTable[i] = new Array(XLEN);
    for(var j = 0; j < XLEN; j++) {// 創(chuàng)建方塊.
      // 生成墻壁 y = 0 || y = YLEN - 1  || x = 0 || x = XLEN -1
      if( j == 0 || j == XLEN - 1 || i == 0 || i == YLEN -1) {
        // 創(chuàng)建石頭
        var newSqaure = SquareFactory.create('Stone', j, i, 'black');
      } else {
        //創(chuàng)建地板
        var newSqaure = SquareFactory.create('Floor', j, i, 'orange');
      }
      this.SquareTable[i][j] = newSqaure;
      this.viewContent.appendChild(newSqaure.viewContent);
    }
  }
}
ground.init();

SquareFactory.js

// 方塊工廠 // 抽象工廠模式
function SquareFactory () {
    
}

SquareFactory.create = function (type,x,y,color) {
    // 先判斷有沒有流水線
    if(typeof SquareFactory.prototype[type] == "undefined"){
      throw "sorry"; 
    }
    if (SquareFactory.prototype[type].prototype.__proto__ != SquareFactory.prototype) {
        SquareFactory.prototype[type].prototype = new SquareFactory();
    }
    
    var newSquare = new SquareFactory.prototype[type](x,y,color);
    return newSquare;
    
}

SquareFactory.prototype.init = function (square, color) {// 上背景顏色
  var sv = square.viewContent;
  sv.style.position = "absolute";
  sv.style.width = square.width + 'px';
  sv.style.height = square.height + 'px';
  sv.style.left = square.x * SQUAREWIDTH + 'px';
  sv.style.top = square.y * SQUAREHEIGHT + 'px';
    sv.style.backgroundColor = color;
}


SquareFactory.prototype.Floor = function (x,y,color) {
    var floor = new Floor(x,y,SQUAREWIDTH,SQUAREHEIGHT);
    this.init(floor, color);
    return floor;
}
SquareFactory.prototype.Stone = function (x,y,color) {
    var stone = new Stone(x,y,SQUAREWIDTH,SQUAREHEIGHT);
    this.init(stone, color);
  return stone;
}
SquareFactory.prototype.Food = function (x,y,color) {
    var food = new Food(x,y,SQUAREWIDTH,SQUAREHEIGHT);
    this.init(food, color);
  return food;
}
SquareFactory.prototype.SnakeHead= function (x,y,color) {
    var snakehead = new Snakehead(x,y,SQUAREWIDTH,SQUAREHEIGHT);
    this.init(snakehead, color);
  return snakehead;
}
SquareFactory.prototype.SnakeBody= function (x,y,color) {
    var snakebody = new SnakeBody(x,y,SQUAREWIDTH,SQUAREHEIGHT);
    this.init(snakebody, color);
  return snakebody;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茄菊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痢站,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滔韵,死亡現(xiàn)場離奇詭異肆捕,居然都是意外死亡,警方通過查閱死者的電腦和手機咸产,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門矢否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脑溢,你說我怎么就攤上這事僵朗。” “怎么了屑彻?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵验庙,是天一觀的道長。 經(jīng)常有香客問我社牲,道長粪薛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任搏恤,我火速辦了婚禮违寿,結(jié)果婚禮上湃交,老公的妹妹穿的比我還像新娘。我一直安慰自己陨界,他們只是感情好巡揍,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菌瘪,像睡著了一般腮敌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俏扩,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天糜工,我揣著相機與錄音,去河邊找鬼录淡。 笑死捌木,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嫉戚。 我是一名探鬼主播刨裆,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彬檀!你這毒婦竟也來了帆啃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤窍帝,失蹤者是張志新(化名)和其女友劉穎努潘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坤学,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡疯坤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了深浮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片压怠。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖略号,靈堂內(nèi)的尸體忽然破棺而出刑峡,到底是詐尸還是另有隱情,我是刑警寧澤玄柠,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布突梦,位于F島的核電站,受9級特大地震影響羽利,放射性物質(zhì)發(fā)生泄漏宫患。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一这弧、第九天 我趴在偏房一處隱蔽的房頂上張望娃闲。 院中可真熱鬧虚汛,春花似錦、人聲如沸皇帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽属拾。三九已至将谊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渐白,已是汗流浹背尊浓。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纯衍,地道東北人栋齿。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像襟诸,于是被迫代替她去往敵國和親瓦堵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計模式概述 在學習面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點:a) 高內(nèi)聚歌亲、低耦合和單一職能的“沖突”實際上谷丸,這兩者...
    彥幀閱讀 3,736評論 0 14
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料应结? 從這篇文章中你...
    hw1212閱讀 12,699評論 2 59
  • 焦慮是我們這個時代人的通病,由于接觸的信息龐大泉唁,大到我們無法掌握鹅龄,都想抓住卻也抓不到。 羅輯思維羅胖在15年的跨年...
    信德趙程新閱讀 306評論 0 0
  • 打卡 第19天亭畜,kindle的閱讀進度是2854/29553(四本)扮休。 onslaught:a strong or...
    哈瓦那閱讀 365評論 0 0