定義
**
/*** 單例模式-餓漢形式
* @author emma_zhang
* @date 2019/2/15
*/public class singletonforhunger
/** * 訪問例項
*/public static singletonforhunger getsingletonforhunger()
public static void dosomething()
}/**
* 單例模式-懶漢形式
** @author emma_zhang
* @date 2019/2/15
*/public class singletonforlazy
/** * 產生例項物件,必須要加同步,不然在多執行緒下可能出錯
* * @return 例項物件
*/public synchronized static singletonforlazy getsingletonforlazy()
return singletonforlazy;
}}
使用場景
定義通用原始碼
/*** 抽象產品類
* @author emma_zhang
* @date 2019/2/18
*/public abstract class product
/** * 抽象方法
*/public abstract void method2();
}/**
* 具體產品類
** @author emma_zhang
* @date 2019/2/18
*/public class concreteproduct1 extends product
}/**
* 抽象工廠類
** @author emma_zhang
* @date 2019/2/18
*/public abstract class creator
/*** 具體工廠類
** @author emma_zhang
* @date 2019/2/18
*/public class concretecreator extends creator catch (exception e)
return (t)product;}}
/*** 場景類
** @author emma_zhang
* @date 2019/2/18
*/public class client
}
應用場景
擴充套件定義
通用原始碼
/*** 抽象產品類
** @author emma_zhang
* @date 2019/2/19
*/public abstract class abstractproducta
/** * 共有的方法,但不同的實現
*/public abstract void dosomething();
}/**
* 產品a1的實現類
** @author emma_zhang
* @date 2019/2/19
*/public class producta1 extends abstractproducta
}/**
* 產品a2的實現類
** @author emma_zhang
* @date 2019/2/19
*/public class producta2 extends abstractproducta
}/**
* 抽象產品類
** @author emma_zhang
* @date 2019/2/19
*/public abstract class abstractproductb
/** * 共有的方法,但不同的實現
*/public abstract void dosomething();
}/**
* 產品b1的實現類
** @author emma_zhang
* @date 2019/2/19
*/public class productb1 extends abstractproductb
}/**
* 產品b2的實現類
** @author emma_zhang
* @date 2019/2/19
*/public class productb2 extends abstractproductb
}/**
* 抽象工廠
** @author emma_zhang
* @date 2019/2/19
*/public abstract class abstractcreator
/*** 產品等級1的實現
** @author emma_zhan
* @date 2019/2/19
*/public class creator1 extends abstractcreator
@override
public abstractproductb createproductb()
}/**
* 產品等級2的實現
** @author emma_zhang
* @date 2019/2/19
*/public class creator2 extends abstractcreator
@override
public abstractproductb createproductb()
}/**
* 場景類
** @author emma_zhang
* @date 2019/2/19
*/public class client
}
優點缺點
定義通用原始碼
/*** 產品類-實現模板方法模式
** @author duogui.zq
* @date 2019/2/21
*/public class product
}/**
* 抽象建造者-規範產品的組建
** @author duogui.zq
* @date 2019/2/21
*/public abstract class builder
/*** 建造者 有多少個產品就有多少個建造者,這些產品類具有相同的介面或者抽象類
** @author duogui.zq
* @date 2019/2/21
*/public class concreteproduct extends builder
@override
public product buildproduct()
}/**
* 導演類
** @author duogui.zq
* @date 2019/2/21
*/public class director
}
定義通用原始碼:
/*** 原型模式
** @author emma_zhang
* @date 2019/2/26
*/public class prototyprclass implements cloneable catch (clonenotsupportedexception e)
return prototyprclass;
}}
使用場景
注意事項
深拷貝和淺拷貝
深拷貝:完全的拷貝
深拷貝的例項
/*** 深拷貝
** @author emma_zhang
* @date 2019/2/26
*/public class deepclone implements cloneable catch (clonenotsupportedexception ex)
return deepclone;
}}
設計模式(2) 建立型模式
對設計模式學了有一段的時間了,設計模式是軟體工程的基石,他是人們反覆使用的,程式設計師們幾十年的經驗總結,以 開放 封閉 單一職責 依賴倒轉 黎克特制代換 合成聚合復用 迪公尺特法則 介面隔離 為基本原則。本篇部落格我對建立型模式進行總結,其中包括 單例模式 工廠方法模式 抽象工廠模式 建造者模式 ...
Python實現設計模式 建立類設計模式
抽象工廠是什麼 抽象工廠是為了提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。例子我建立了乙個抽象工廠類,它的表現取決於我們選擇什麼工廠來初始化它。例子中,抽象工廠類是寵物店 petshop 它有乙個動作 show pet 用來展示動物,我們如果用貓 cat 初始化寵物店,展示時...
設計模式2 工廠模式(建立型模式)
今天折騰第二種設計模式 工廠模式。和單例模式一樣,工廠模式也是一種建立型模式。通俗一點的話來講,工廠模式的出現是為了讓開發人員使用統一的介面函式 工廠類 實現相關類的例項化,這些待例項化的類有彼此類似的結構或者功能,這樣開發人員就不用挨個去執行 new 操作,將具體的例項化 new 操作交給封裝好的...