Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ca934a0

Browse files
Optz Update README
1 parent 87b2f23 commit ca934a0

File tree

7 files changed

+216
-24
lines changed

7 files changed

+216
-24
lines changed

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
/.settings/
44
/.classpath
55
/.project
6+
/.idea/
7+
### Optz ingnore file ###

‎README.md‎

Lines changed: 174 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</p>
1010

1111
<p align="center">
12-
<a href="#"><img src="https://img.shields.io/wercker/ci/wercker/docs.svg?style=for-the-badge" alt=""></a>
12+
<a href="#"><img src="https://img.shields.io/badge/Java-Patterns-blue.svg?style=for-the-badge" alt=""></a>
1313
<a href="#"><img src="https://img.shields.io/badge/Author-Jason-orange.svg?style=for-the-badge" alt=""></a>
1414
</p>
1515

@@ -19,7 +19,7 @@
1919
2020

2121
# patterns
22-
* Project:patternsss
22+
* Project:Java-Patterns
2323
* OfficialWebsite:http://patterns.ucaner.cn
2424
* describe:设计模式学习笔记
2525

@@ -58,33 +58,196 @@
5858
* 合成复用原则(Composite Reuse Principle)
5959
原则是尽量使用合成/聚合的方式,而不是使用继承。
6060

61-
# 责任链模式
62-
* 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
63-
* 具体处理者(BossHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
61+
# 工厂方法模式
62+
* 工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
63+
* 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
64+
+ 工厂方法模式包含**四个**部分:
65+
- 1.抽象产品:产品对象同一的基类,或者是同一的接口
66+
- 2.具体的产品:各个不同的实例对象类
67+
- 3.抽象工厂:所有的子类工厂类的基类,或是同一的接口
68+
- 4.具体的工厂子类:负责每个不同的产品对象的实际创建
69+
70+
```java
71+
package cn.ucaner.pattern.create.factory.factory;
72+
73+
import cn.ucaner.pattern.create.factory.AbsHumanFactory;
74+
import cn.ucaner.pattern.create.factory.Human;
75+
76+
/**
77+
* @Package:cn.ucaner.pattern.create.factory.factory
78+
* @ClassName:HumanFactory
79+
* @Description: <p> 工厂模式 --- 具体工厂 - human 工厂 extends abs humanFactory </p>
80+
* @Author: -
81+
* @CreatTime:2017年10月26日 下午5:46:37
82+
* @Modify By:
83+
* @ModifyTime:
84+
* @Modify marker:
85+
* @version V1.0
86+
*/
87+
public class HumanFactory extends AbsHumanFactory {
88+
89+
@SuppressWarnings("unchecked")
90+
@Override
91+
public <T extends Human> T createHumen(Class<T> tClass) {
92+
Human humen=null;
93+
try {
94+
humen= (T) Class.forName(tClass.getName()).newInstance();
95+
} catch (InstantiationException e) {
96+
e.printStackTrace();
97+
} catch (IllegalAccessException e) {
98+
e.printStackTrace();
99+
} catch (ClassNotFoundException e) {
100+
e.printStackTrace();
101+
}
102+
return (T)humen;
103+
}
104+
}
105+
106+
```
107+
`具体的实现类`
108+
```java
109+
//黑种人
110+
public class BlackHuman implements Human {
111+
112+
@Override
113+
public void getColor() {
114+
System.out.println("黑色人种");
115+
}
116+
}
117+
118+
//白种人
119+
public class WhiteHuman implements Human {
120+
121+
@Override
122+
public void getColor() {
123+
System.out.println("白色人种");
124+
}
125+
}
126+
127+
//黄种人
128+
public class YellowHuman implements Human {
129+
130+
@Override
131+
public void getColor() {
132+
System.out.println("黄色人种");
133+
}
134+
}
135+
136+
```
137+
`抽象工厂`
138+
```java
139+
package cn.ucaner.pattern.create.factory;
140+
141+
/**
142+
* @Package:cn.ucaner.pattern.create.factory
143+
* @ClassName:AbsHumanFactory
144+
* @Description: <p> 工厂模式 --- 抽象出来的工厂</p>
145+
* @Author: -
146+
* @CreatTime:2017年10月26日 下午5:50:00
147+
* @Modify By:
148+
* @ModifyTime:
149+
* @Modify marker:
150+
* @version V1.0
151+
*/
152+
public abstract class AbsHumanFactory {
153+
154+
public abstract <T extends Human> T createHumen(Class<T> tClass);
155+
156+
}
157+
158+
```
159+
```java
160+
/**
161+
* 工厂类测试 传入对应的实体 创建对应的对象
162+
*/
163+
public class FactoryMain {
164+
165+
public static void main(String[] args) {
166+
//初始化一个工厂
167+
AbsHumanFactory humanFactory = new HumanFactory();
168+
169+
//建造一个黄种人
170+
Human yellowHuman = humanFactory.createHumen(YellowHuman.class);
171+
yellowHuman.getColor();
172+
173+
//建造一个黑人
174+
Human blackHuman = humanFactory.createHumen(BlackHuman.class);
175+
blackHuman.getColor();
176+
177+
//建造一个白人
178+
Human whiteHuman = humanFactory.createHumen(WhiteHuman.class);
179+
whiteHuman.getColor();
180+
181+
}
182+
}
183+
184+
```
185+
186+
# 单例模式
187+
*
188+
*
64189

190+
# 建造者模式
191+
*
192+
*
65193

66-
# 命令模式
194+
# 原型模式
67195
*
68196
*
69197

70-
# 观察者模式
198+
# 适配器模式
71199
*
72200
*
73201

74-
# 状态模式
202+
# 代理模式
75203
*
76204
*
77205

78-
# 访问者模式
206+
# 外观模式
207+
*
208+
*
209+
210+
# 桥接模式
211+
*
212+
*
213+
214+
# 组合模式
79215
*
80216
*
81217

82218
# 享元模式
219+
*
220+
*
221+
222+
223+
# 责任链模式
224+
* 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
225+
* 具体处理者(BossHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
226+
83227

228+
# 命令模式
229+
* 将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。
230+
* 命令模式的定义比较复杂,提到了很多术语,例如"用不同的请求对客户进行参数化"、"对请求排队","记录请求日志"、"支持可撤销操作"等,在后面我们将对这些术语进行一一讲解
231+
232+
# 观察者模式
233+
* 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新
234+
* 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息
235+
236+
# 状态模式
237+
* 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
238+
* 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
239+
* 2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。
240+
241+
242+
# 访问者模式
243+
* 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变
244+
* 变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type);而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type)。
84245

246+
# 享元模式 :dog:
247+
* "享"就是分享之意,指一物被众人共享,而这也正是该模式的终旨所在
248+
* 享元模式有点类似于单例模式,都是只生成一个对象来被共享使用。这里有个问题,那就是对共享对象的修改,为了避免出现这种情况,我们将这些对象的公共部分,或者说是不变化的部分抽取出来形成一个对象。这个对象就可以避免到修改的问题。
249+
* 享元的目的是为了减少不会要额内存消耗,将多个对同一对象的访问集中起来,不必为每个访问者创建一个单独的对象,以此来降低内存的消耗。
85250

86-
###Emoj
87-
:smile: :dog: :sunny: :zap: :pig: :four_leaf_clover: :watermelon: :kissing_closed_eyes: :full_moon_with_face:
88251

89252

90253
### FAQ

‎pom.xml‎

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,21 @@
88
<artifactId>patterns</artifactId>
99
<packaging>jar</packaging>
1010
<version>1.0-SNAPSHOT</version>
11-
<name>Java-Patterns</name>
11+
12+
13+
<build>
14+
<plugins>
15+
<plugin>
16+
<groupId>org.apache.maven.plugins</groupId>
17+
<artifactId>maven-compiler-plugin</artifactId>
18+
<configuration>
19+
<source>8</source>
20+
<target>8</target>
21+
</configuration>
22+
</plugin>
23+
</plugins>
24+
</build>
25+
<name>Java-Patterns</name>
1226

1327

1428
</project>

‎src/cn/ucaner/pattern/action/chainOfResponsibility/abs/Handler.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ public void setNextHandler(Handler nextHandler) {
8282
* @Autor: Jason - jasonandy@hotmail.com
8383
*/
8484
public abstract int getLevel();
85-
85+
86+
87+
8688
/**
8789
* @Description: 处理者名字
8890
* @return String

‎src/cn/ucaner/pattern/create/builder/BuilderTest.java‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
* @version V1.0
2323
*/
2424
public class BuilderTest {
25-
25+
26+
2627
public static void main(String[] args) {
2728

2829
WolverineDirector director = new WolverineDirector();
@@ -36,11 +37,10 @@ public static void main(String[] args) {
3637
System.out.println(wolverine.toString());
3738
}
3839
}
39-
//Outputs
40-
//claw
40+
//Outputsclaw
4141
//Jane
42-
//Name is successfully built
43-
//Age is successfully built
42+
//Wali
43+
//18
4444
//Wolverine is successfully built
4545
//Lover:Jane xFactor:claw Name:Wali Age:18
46-
//cn.ucaner.pattern.create.builder.XMan@7852e922
46+
//cn.ucaner.pattern.create.builder.XMan@4554617c

‎src/cn/ucaner/pattern/create/prototype/DeepCopy.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
*/
1111
package cn.ucaner.pattern.create.prototype;
1212

13-
importjava.util.ArrayList;
13+
1414
import cn.ucaner.pattern.create.prototype.prototypeAbs.BaseMessage;
1515

16+
import java.util.ArrayList;
17+
1618
/**
1719
* @Package:cn.ucaner.pattern.create.prototype
1820
* @ClassName:DeepCopy

‎src/cn/ucaner/pattern/create/prototype/prototypeAbs/BaseMessage.java‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,23 @@
2424
* @version V1.0
2525
*/
2626
public abstract class BaseMessage {
27-
//发件人
27+
28+
/**
29+
* 发件人
30+
*/
2831
private String send;
29-
//收件人
32+
33+
/**
34+
* 收件人
35+
*/
3036
private String receiver;
31-
//消息
37+
38+
/**
39+
* 消息
40+
*/
3241
private String message;
3342

34-
private ArrayList<String> imgList=new ArrayList<>();
43+
private ArrayList<String> imgList = new ArrayList<>();
3544

3645
public ArrayList<String> getImgList() {
3746
return imgList;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /