From a3dc8be2fa06468e116c5def517e9bfbb160b35d Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 5 Jun 2018 10:12:43 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 51 +++++++++++++++++- pics/a40661e4-1a71-46d2-a158-ff36f7fc3331.png | Bin 0 -> 17408 bytes 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 pics/a40661e4-1a71-46d2-a158-ff36f7fc3331.png diff --git a/notes/设计模式.md b/notes/设计模式.md index 3e159d50..af6cf903 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -38,6 +38,8 @@ 拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 +[源码以及 UML 图](https://github.com/CyC2018/Design-Pattern-Java) + # 二、创建型 ## 1. 单例(Singleton) @@ -523,7 +525,54 @@ abcdefghijklmnopqrstuvwxyz ### 意图 -使用原型实例指定要创建对象的类型;通过复制这个原型来创建新对象。 +使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。 + +### 类图 + +

+ +### 实现 + +```java +public abstract class Prototype { + abstract Prototype myClone(); +} +``` + +```java +public class ConcretePrototype extends Prototype { + + private String filed; + + public ConcretePrototype(String filed) { + this.filed = filed; + } + + @Override + Prototype myClone() { + return new ConcretePrototype(filed); + } + + @Override + public String toString() { + return filed; + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Prototype prototype = new ConcretePrototype("abc"); + Prototype clone = prototype.myClone(); + System.out.println(clone.toString()); + } +} +``` + +```html +abc +``` ### JDK diff --git a/pics/a40661e4-1a71-46d2-a158-ff36f7fc3331.png b/pics/a40661e4-1a71-46d2-a158-ff36f7fc3331.png new file mode 100644 index 0000000000000000000000000000000000000000..e980a2e30ff9ca14ba2e08d9f7d0de79a45585a9 GIT binary patch literal 17408 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%0A`d6CpCk~l=`?ptgHGkO`3W<4hK<(;D_&3wD0 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