├── .gitbook
└── assets
│ ├── 1648900517(1).png
│ ├── 1648910128(1).png
│ ├── 1648910902.png
│ ├── 1648911234(1).png
│ ├── 1648911669(1).png
│ ├── 1649214342(1).png
│ ├── 1649214424(1).png
│ ├── 764_b12_512.png
│ ├── abstractfactoryfactory.png
│ ├── abstractfactoryfactoryclass.png
│ ├── abstractfactoryiphone.png
│ ├── abstractfactoryiphoneclass.png
│ ├── abstractfactoryissue.png
│ ├── abstractfactoryrouter.png
│ ├── abstractfactoryrouterclass.png
│ ├── abstractfactorytest.png
│ ├── abstractfactoryuml.png
│ ├── factoryfactory.png
│ ├── factoryfactoryclass.png
│ ├── factorypizza.png
│ ├── factorypizzaclass.png
│ ├── factorytest.png
│ ├── factoryuml.png
│ ├── greekpizza.png
│ ├── image (1).png
│ ├── image.png
│ ├── observerTest.png
│ ├── observercat.png
│ ├── observerdog.png
│ ├── observerissue.png
│ ├── observermouse.png
│ ├── observerobserver.png
│ ├── observerobservered.png
│ ├── observertestit.png
│ ├── productbuffer1.png
│ ├── productbuffer2.png
│ ├── productcomsumer.png
│ ├── productissue.png
│ ├── productproducer.png
│ ├── producttest.png
│ ├── productuml.png
│ ├── simplefactorypizza.png
│ ├── simplefactorypizzafactory.png
│ ├── simplefactoryuml.png
│ ├── singlehungry.png
│ ├── singlehungryandlock.png
│ ├── singleissue.png
│ ├── singlelazy.png
│ ├── singleuml.png
│ ├── templateredmilk.png
│ ├── templatesoymilk.png
│ ├── templatetest.png
│ └── templateuml.png
├── 10种设计模式
├── README.md
├── 单例模式.md
├── 工厂模式.md
├── 抽象工厂模式.md
├── 数据访问对象模式.md
├── 模板模式.md
├── 生产者消费者模式.md
├── 策略模式.md
├── 简单工厂模式.md
├── 观察者模式.md
└── 迭代器模式.md
├── README.md
├── src
├── InputTest.java
├── Main.java
├── MyException.java
├── Person.java
├── Sort.java
├── Type.java
└── Welcome.java
├── src10
├── prodconsumer
│ ├── .idea
│ │ ├── .gitignore
│ │ ├── misc.xml
│ │ └── modules.xml
│ ├── Buffer.java
│ ├── Consumer.java
│ ├── Main.java
│ └── Producer.java
└── thread
│ ├── AddDec.java
│ ├── DeadLock.java
│ ├── DeadLockExample2.java
│ ├── FutureDemo.java
│ ├── FutureTaskDemo.java
│ ├── InterruptTest.java
│ ├── RunnableVSThread.java
│ ├── SetDaemonDemo.java
│ └── ThreadPoolDemo.java
├── src11
├── Generic
│ ├── Durian.java
│ ├── GenericDurian.java
│ ├── GenericMethod.java
│ ├── GenericTest.java
│ ├── GeneticStaticMethod.java
│ ├── ShowInterface.java
│ ├── ShowInterfaceTest.java
│ └── WildCardDemo.java
├── Reflect
│ ├── ConTest.java
│ ├── FieldTest.java
│ ├── MethodTest.java
│ ├── Singleton.java
│ ├── SingletonTest.java
│ ├── Student.java
│ ├── Test.java
│ ├── forNameTest.java
│ └── getClassTest.java
└── TemplateMethod
│ ├── Client.java
│ ├── PureSoyMilk.java
│ ├── RedBeanSoyMilk.java
│ └── SoyMilk.java
├── src12
├── SocketTest
│ ├── Client.java
│ ├── Send.java
│ └── Server.java
├── observerTest
│ ├── Cat.java
│ ├── Client.java
│ ├── Dog.java
│ ├── Mouse.java
│ ├── MyObserver.java
│ └── MySubject.java
└── urlTest
│ ├── URLDemo.java
│ └── UrlSite.java
├── src3
├── ArrayTest.java
└── Person.java
├── src4
├── abstract
│ ├── Main.java
│ ├── Person.java
│ ├── Student.java
│ └── Teacher.java
├── exception
│ ├── Main.java
│ ├── MyException.java
│ └── exception_eg.java
├── inhent
│ ├── Person.java
│ ├── PolymorphismTest.java
│ ├── Student.java
│ └── Teacher.java
├── innerClass
│ ├── Father.java
│ ├── Main.java
│ ├── Mother.java
│ └── Son.java
├── innerClassByInterface
│ ├── Daughter.java
│ ├── Father.java
│ ├── Girl.java
│ └── Mother.java
├── interface
│ ├── Main.java
│ ├── Person.java
│ ├── Student.java
│ └── Teacher.java
├── object
│ ├── Student.java
│ └── TestObject.java
└── super
│ ├── Main.java
│ ├── Person.java
│ └── Student.java
├── src5
├── abstractFactory
│ ├── HuaweiFactory.java
│ ├── HuaweiPhone.java
│ ├── HuaweiRouter.java
│ ├── IPhoneProduct.java
│ ├── IProductFactory.java
│ ├── IRouterProduct.java
│ ├── TestFactoryMain.java
│ ├── XiaomiFactory.java
│ ├── XiaomiPhone.java
│ └── XiaomiRounter.java
├── factory
│ ├── CheesePizza.java
│ ├── ChicagoPizzaStore.java
│ ├── GreekPizza.java
│ ├── NYPizzaStore.java
│ ├── PepperoniPizza.java
│ ├── Pizza.java
│ ├── PizzaStore.java
│ ├── TestOrderPizza.java
│ └── VeggiePizza.java
├── simplefactory
│ ├── CheesePizza.java
│ ├── GreekPizza.java
│ ├── PepperoniPizza.java
│ ├── Pizza.java
│ ├── PizzaStore.java
│ └── SimplePizzaFactory.java
└── singleton
│ └── SingletonPattern.java
├── src6
├── example
│ ├── ATM.java
│ ├── BlackBox.java
│ └── WhiteBox.java
└── test
│ ├── BlackBoxTest.java
│ └── WhiteBoxTest.java
├── src7
├── collection
│ ├── ArraylistTest.java
│ ├── HashmapTest.java
│ ├── HashsetTest.java
│ └── LinkedlistTest.java
├── iteratorTest
│ ├── Aggregate.java
│ ├── ConcreteAggregate.java
│ ├── ConcreteIterator.java
│ ├── Iterator.java
│ └── IteratorTest.java
└── strategy
│ ├── AdvancedMemberStrategy.java
│ ├── Client.java
│ ├── IntermediateMemberStrategy.java
│ ├── MemberStrategy.java
│ ├── Price.java
│ └── PrimaryMemberStrategy.java
├── src8
├── DAO
│ ├── DataAccessObjectPatternDemo.java
│ ├── Student.java
│ ├── StudentDAO.java
│ └── StudentDaoImpl.java
└── fileRW
│ ├── BRRead.java
│ ├── BRReadLines.java
│ ├── ChartoByte.java
│ ├── Person.java
│ ├── SeriDemo.java
│ ├── example_files.java
│ └── fileStreamTest.java
└── src9
├── mvc
├── MVCPatternDemo.java
├── Student.java
├── StudentController.java
└── StudentView.java
└── swingTest
├── BorderLayoutDemo.java
├── ButtonFrame.java
├── ButtonFrame2.java
├── ButtonFrame2Test.java
├── ButtonFrameTest.java
├── SimpleFrame.java
├── SimpleFrameTest.java
├── TestController.java
├── TestModel.java
└── TestView.java
/.gitbook/assets/1648900517(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1648900517(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/1648910128(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1648910128(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/1648910902.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1648910902.png
--------------------------------------------------------------------------------
/.gitbook/assets/1648911234(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1648911234(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/1648911669(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1648911669(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/1649214342(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1649214342(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/1649214424(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/1649214424(1).png
--------------------------------------------------------------------------------
/.gitbook/assets/764_b12_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/764_b12_512.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryfactory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryfactory.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryfactoryclass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryfactoryclass.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryiphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryiphone.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryiphoneclass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryiphoneclass.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryissue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryissue.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryrouter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryrouter.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryrouterclass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryrouterclass.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactorytest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactorytest.png
--------------------------------------------------------------------------------
/.gitbook/assets/abstractfactoryuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/abstractfactoryuml.png
--------------------------------------------------------------------------------
/.gitbook/assets/factoryfactory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factoryfactory.png
--------------------------------------------------------------------------------
/.gitbook/assets/factoryfactoryclass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factoryfactoryclass.png
--------------------------------------------------------------------------------
/.gitbook/assets/factorypizza.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factorypizza.png
--------------------------------------------------------------------------------
/.gitbook/assets/factorypizzaclass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factorypizzaclass.png
--------------------------------------------------------------------------------
/.gitbook/assets/factorytest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factorytest.png
--------------------------------------------------------------------------------
/.gitbook/assets/factoryuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/factoryuml.png
--------------------------------------------------------------------------------
/.gitbook/assets/greekpizza.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/greekpizza.png
--------------------------------------------------------------------------------
/.gitbook/assets/image (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/image (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/image.png
--------------------------------------------------------------------------------
/.gitbook/assets/observerTest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observerTest.png
--------------------------------------------------------------------------------
/.gitbook/assets/observercat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observercat.png
--------------------------------------------------------------------------------
/.gitbook/assets/observerdog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observerdog.png
--------------------------------------------------------------------------------
/.gitbook/assets/observerissue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observerissue.png
--------------------------------------------------------------------------------
/.gitbook/assets/observermouse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observermouse.png
--------------------------------------------------------------------------------
/.gitbook/assets/observerobserver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observerobserver.png
--------------------------------------------------------------------------------
/.gitbook/assets/observerobservered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observerobservered.png
--------------------------------------------------------------------------------
/.gitbook/assets/observertestit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/observertestit.png
--------------------------------------------------------------------------------
/.gitbook/assets/productbuffer1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productbuffer1.png
--------------------------------------------------------------------------------
/.gitbook/assets/productbuffer2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productbuffer2.png
--------------------------------------------------------------------------------
/.gitbook/assets/productcomsumer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productcomsumer.png
--------------------------------------------------------------------------------
/.gitbook/assets/productissue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productissue.png
--------------------------------------------------------------------------------
/.gitbook/assets/productproducer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productproducer.png
--------------------------------------------------------------------------------
/.gitbook/assets/producttest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/producttest.png
--------------------------------------------------------------------------------
/.gitbook/assets/productuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/productuml.png
--------------------------------------------------------------------------------
/.gitbook/assets/simplefactorypizza.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/simplefactorypizza.png
--------------------------------------------------------------------------------
/.gitbook/assets/simplefactorypizzafactory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/simplefactorypizzafactory.png
--------------------------------------------------------------------------------
/.gitbook/assets/simplefactoryuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/simplefactoryuml.png
--------------------------------------------------------------------------------
/.gitbook/assets/singlehungry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/singlehungry.png
--------------------------------------------------------------------------------
/.gitbook/assets/singlehungryandlock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/singlehungryandlock.png
--------------------------------------------------------------------------------
/.gitbook/assets/singleissue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/singleissue.png
--------------------------------------------------------------------------------
/.gitbook/assets/singlelazy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/singlelazy.png
--------------------------------------------------------------------------------
/.gitbook/assets/singleuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/singleuml.png
--------------------------------------------------------------------------------
/.gitbook/assets/templateredmilk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/templateredmilk.png
--------------------------------------------------------------------------------
/.gitbook/assets/templatesoymilk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/templatesoymilk.png
--------------------------------------------------------------------------------
/.gitbook/assets/templatetest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/templatetest.png
--------------------------------------------------------------------------------
/.gitbook/assets/templateuml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cuiyungao/JavaCodeExamples/082cf74ece54d3c378debd542a0ef8a53901cf3c/.gitbook/assets/templateuml.png
--------------------------------------------------------------------------------
/10种设计模式/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 10种设计模式
3 | ---
4 |
5 | # 10种设计模式
6 |
7 | 课程中共涉及10种设计模式,其中7种来自GOF23,其它3种分别是数据访问对象模式、MVC模式、生产者消费者模式。如图1所示,表格中红色字体是会涉及的GOF设计模式。
8 |
9 | .png)
10 |
--------------------------------------------------------------------------------
/10种设计模式/单例模式.md:
--------------------------------------------------------------------------------
1 | # 单例模式
2 | ### 主要内容
3 | 属于创建型的设计模式
4 |
5 | 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
6 |
7 | 
8 | ### 代码例子
9 | 解决的问题:
10 |
11 | 很多时候我们都要保证一个类只有一个实例
12 |
13 | #### 懒汉式:
14 | 
15 |
16 | #### 饿汉式:
17 | 
18 |
19 | #### 懒汉式+同步锁:
20 | 
21 |
22 | #### 测试代码:
23 | 无
24 |
25 | ### 总结
26 | 
--------------------------------------------------------------------------------
/10种设计模式/工厂模式.md:
--------------------------------------------------------------------------------
1 | # 工厂模式
2 | ### 主要内容
3 | 属于创建型的设计模式
4 |
5 | 
6 | ### 代码例子
7 | 模拟一个可以卖出不同口味的pizza店,比萨店经营有成,接下来的计划就是在多个不同城市开设加盟店
8 |
9 | 需要建立一个框架,把PizzaStore和创建Pizza捆绑在一起, 同时又保持
10 | 一定的弹性。
11 |
12 | #### pizza(为抽象类):
13 | 
14 |
15 | #### pizza的各个子类:
16 | 
17 |
18 | #### 工厂(抽象):
19 | 
20 |
21 | #### 具体工厂:
22 | 
23 |
24 | #### 测试代码:
25 | 
26 |
27 | ### 总结
28 |
29 | 1. 通过扩展来新增具体类的,符合开闭原则,但是在客户端就必须要感知到具体的工厂类,
30 | 也就是将判断逻辑由简单工厂的工厂类挪到客户端。
31 | 2. 工厂模式横向扩展很方便,假如又有新区域的加盟店,那么只需要创建相应的披萨店子
32 | 类和披萨子类去实现抽象工厂接口和抽象产品接口即可,而不用去修改原有已经存在的代码。
--------------------------------------------------------------------------------
/10种设计模式/抽象工厂模式.md:
--------------------------------------------------------------------------------
1 | # 抽象工厂模式
2 | ### 主要内容
3 | 属于创建型的设计模式
4 |
5 | 
6 | ### 代码例子
7 | 模拟各大厂商不同品牌产品的加工,其中一种产品称为产品等级(如手机),一个产生不同的产品等级的厂商为产品族
8 |
9 | #### 手机:
10 | 
11 |
12 | #### 手机实现类:
13 | 
14 |
15 | #### 路由器
16 | 
17 |
18 | #### 路由器实现类:
19 | 
20 |
21 | #### 厂商(抽象))
22 | 
23 |
24 | #### 厂商:
25 | 
26 |
27 | #### 测试代码:
28 | 
29 |
30 | ### 总结
31 | 
32 |
--------------------------------------------------------------------------------
/10种设计模式/数据访问对象模式.md:
--------------------------------------------------------------------------------
1 | # 数据访问对象模式
2 |
3 | 简称DAO,该模式不是GOF23种模式之一。
4 |
5 | 重点在于把**数据访问的操作与业务分离**,实现对**数据库等资源的各种操作**。常用的数据操作比如增删查改都可以放在DAO层。
6 |
7 | 
8 |
9 | 包含**3个参与者**:数据访问对象接口、数据访问对象实体类、模型对象/数值对象。
10 |
11 | 
12 |
13 | **数据访问对象接口:**该接口定义了在一个模型对象上要执行的标准操作。
14 |
15 | **数据访问对象实体类:**该类实现了上述的接口,负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
16 |
17 | **模型对象/数值对象:**该对象是简单的普通对象,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。
18 |
19 | ### 数据访问对象模式总结
20 |
21 | .png)
22 |
--------------------------------------------------------------------------------
/10种设计模式/模板模式.md:
--------------------------------------------------------------------------------
1 | # 模板模式
2 | ### 主要内容
3 | 行为型设计模式
4 |
5 | 
6 | ### 代码例子
7 | 用模板方法实现红豆奶茶制作
8 |
9 | #### 模板类(抽象):
10 | 
11 |
12 | #### 实现的模板:
13 | 
14 |
15 |
16 | #### 测试代码:
17 | 
18 |
19 | ### 总结
20 | 模板方法导致一种反向控制结构
21 |
22 | 指的是父类调用一个子类的操作,而不是相反
23 |
24 | 有时被称为“好莱坞法则”,即“别找我们。我们找你”
25 |
--------------------------------------------------------------------------------
/10种设计模式/生产者消费者模式.md:
--------------------------------------------------------------------------------
1 | # 生产者消费者模式
2 | ### 主要内容
3 | 不属于GOF设计模式
4 |
5 | 
6 | ### 代码例子
7 |
8 | #### 缓冲区:
9 | 
10 |
11 | 
12 |
13 |
14 | #### 生产者:
15 | 
16 |
17 | #### 消费者:
18 | 
19 |
20 | #### 测试代码:
21 | 
22 |
23 | ### 总结
24 | 
25 |
--------------------------------------------------------------------------------
/10种设计模式/策略模式.md:
--------------------------------------------------------------------------------
1 | # 策略模式
2 |
3 | ### 主要内容
4 |
5 | 属于行为型的设计模式。
6 |
7 | 重点对**策略进行抽象**,策略之间**互相独立**,可以互相替换,使得算法与客户分开。主要由是**3个参与者**:抽象策略类(策略接口)、具体策略类、环境类(策略使用类)。
8 |
9 | .png)
10 |
11 | ### 代码例子
12 |
13 | 下面举一个例子,我们想要实现超市销售商品的价格计算函数。对不同类型的用户价格的计算方式不一样。
14 |
15 | 算法一:对初级会员没有折扣。
16 |
17 | 算法二:对中级会员提供10%的促销折扣。
18 |
19 | 算法三:对高级会员提供20%的促销折扣。
20 |
21 | #### **我们首先设计抽象策略:**
22 |
23 | ```
24 | package strategy;
25 | public interface MemberStrategy {
26 | /** * 计算图书的价格
27 | * @param booksPrice 图书的原价
28 | * @return 计算出打折后的价格
29 | */
30 | public double calcPrice(double booksPrice);
31 | }
32 | ```
33 |
34 | #### **接着实现两个具体策略类:**
35 |
36 | 实现第一个具体策略类:
37 |
38 | ```
39 | package strategy;
40 | public class AdvancedMemberStrategy implements MemberStrategy{
41 | @Override
42 | public double calcPrice(double booksPrice) {
43 | System.out.println("对于高级会员的折扣为20%");
44 | return booksPrice * 0.8;
45 | }
46 | }
47 | ```
48 |
49 | 实现第二个具体策略类:
50 |
51 | ```
52 | package strategy;
53 | public class PrimaryMemberStrategy implements MemberStrategy{
54 | @Override
55 | public double calcPrice(double booksPrice) {
56 | System.out.println("对于初级会员的没有折扣");
57 | return booksPrice;
58 | }
59 | }
60 | ```
61 |
62 | #### **最后实现环境类:**
63 |
64 | ```
65 | package strategy;
66 | public class Price {
67 | private MemberStrategy strategy;
68 | /**
69 | * 构造函数,传入一个具体的策略对象
70 | * @param strategy 具体的策略对象
71 | */
72 | public Price(MemberStrategy strategy){
73 | this.strategy = strategy;
74 | }
75 | /**
76 | *计算图书的价格
77 | * @param booksPrice 图书的原价
78 | * @return 计算出打折后的价格
79 | */
80 | public double quote(double booksPrice){
81 | return this.strategy.calcPrice(booksPrice);
82 | }
83 | }
84 | ```
85 |
86 | **测试的代码如下:**
87 |
88 | ```
89 | package strategy;
90 | public class Client {
91 | public static void main(String[] args) {
92 | //选择并创建需要使用的策略对象
93 | MemberStrategy strategy = new AdvancedMemberStrategy();
94 | //创建环境
95 | Price price = new Price(strategy);
96 | //计算价格
97 | double quote = price.quote(300);
98 | System.out.println("图书的最终价格为:" + quote);
99 | }
100 | }
101 | ```
102 |
103 | ### 策略模式总结
104 |
105 | 
106 |
--------------------------------------------------------------------------------
/10种设计模式/简单工厂模式.md:
--------------------------------------------------------------------------------
1 | # 简单工厂模式
2 | ### 主要内容
3 | 属于创建型的设计模式
4 |
5 | 简单工厂模式 (SimpleFactory Pattern) 并不是一个真正意义上设计模式,但工
6 | 厂模式是建立在它之上。
7 |
8 | 
9 | ### 代码例子
10 | 模拟一个可以卖出不同口味的pizza店
11 |
12 | #### pizza的父类(为抽象类):
13 | 
14 |
15 | #### pizza的各个子类:
16 | 
17 |
18 | #### 工厂:
19 | 
20 |
21 | #### 测试代码:
22 |
23 | ### 总结:
24 |
25 | 创建对象的逻辑判断放在了工厂类中,客户不感知具体的类,但是其违背了开闭原则,
26 | 如果要增加新的披萨类型,就必须修改工厂类。
--------------------------------------------------------------------------------
/10种设计模式/观察者模式.md:
--------------------------------------------------------------------------------
1 | # 观察者模式
2 | ### 主要内容
3 | 行为型设计模式
4 |
5 | 
6 | ### 代码例子
7 | 假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也
8 | 跟着叫,使用观察者模式描述该过程。
9 |
10 | #### 观察者(抽象):
11 | 
12 |
13 | #### 被观察者(抽象):
14 | 
15 |
16 | #### 猫:
17 | 
18 |
19 | #### 狗子:
20 | 
21 |
22 | #### 老鼠:
23 | 
24 |
25 | #### 测试代码:
26 | 
27 |
28 | ### 总结
29 | 
--------------------------------------------------------------------------------
/10种设计模式/迭代器模式.md:
--------------------------------------------------------------------------------
1 | # 迭代器模式
2 |
3 | ### 主要内容
4 |
5 | 属于行为型的设计模式。
6 |
7 | 重点是将聚合对象的**存储和遍历行为分离**,提供多种迭代聚合对象中数据的方法。迭代器方法是GOF23中设计模式中最为常用的方法,便于对各种集合类型遍历。
8 |
9 | 主要包含**4个参与者**,包含抽象聚集类、具体聚集类、抽象迭代器类(或者接口)和具体迭代器类。
10 |
11 | .png)
12 |
13 | ### 代码例子
14 |
15 | **首先实现聚集抽象类:**
16 |
17 | ```
18 | package iteratorTest;
19 | //Aggregate聚集抽象类
20 | public interface Aggregate {
21 | //添加
22 | void add(Object object);
23 | //创建迭代器
24 | Iterator createIterator();
25 | }
26 | ```
27 |
28 | **实现具体聚集类:**
29 |
30 | ```
31 | package iteratorTest;
32 | import java.util.*;
33 | //ConcreteAggregate集体聚集类,继承Aggregate
34 | public class ConcreteAggregate implements Aggregate {
35 | private List