Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
66bc75d5
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
66bc75d5
编写于
9月 01, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
f3d69c36
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
3 deletion
+9
-3
notes/设计模式.md
notes/设计模式.md
+9
-3
未找到文件。
notes/设计模式.md
浏览文件 @
66bc75d5
...
...
@@ -202,7 +202,7 @@ public class Singleton {
简单工厂不是设计模式,更像是一种编程习惯。它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。
这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。
因为客户类往往有多个,如果不使用简单工厂,
所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。
这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。
客户类往往有多个,如果不使用简单工厂,那么
所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。
<div
align=
"center"
>
<img
src=
"../pics//c79da808-0f28-4a36-bc04-33ccc5b83c13.png"
/>
</div><br>
...
...
@@ -228,7 +228,7 @@ public class ConcreteProduct2 implements Product {
}
```
以下的 Client 类
中包含了实例化的代码,这是一种错误的实现,如果在客户类中存在实例化代码,就需要
将代码放到简单工厂中。
以下的 Client 类
包含了实例化的代码,这是一种错误的实现。如果在客户类中存在这种实例化代码,就需要考虑
将代码放到简单工厂中。
```
java
public
class
Client
{
...
...
@@ -988,6 +988,7 @@ public class ConcreteAggregate implements Aggregate {
```
java
public
interface
Iterator
<
Item
>
{
Item
next
();
boolean
hasNext
();
...
...
@@ -1018,6 +1019,7 @@ public class ConcreteIterator<Item> implements Iterator {
```
java
public
class
Client
{
public
static
void
main
(
String
[]
args
)
{
Aggregate
aggregate
=
new
ConcreteAggregate
();
Iterator
<
Integer
>
iterator
=
aggregate
.
createIterator
();
...
...
@@ -1826,7 +1828,7 @@ No gumball dispensed
### Class Diagram
-
Strategy 接口定义了一个算法族,它们都
具有
behavior() 方法。
-
Strategy 接口定义了一个算法族,它们都
实现了
behavior() 方法。
-
Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。
<div
align=
"center"
>
<img
src=
"../pics//1fc969e4-0e7c-441b-b53c-01950d2f2be5.png"
/>
</div><br>
...
...
@@ -1867,6 +1869,7 @@ public class Squeak implements QuackBehavior{
```
java
public
class
Duck
{
private
QuackBehavior
quackBehavior
;
public
void
performQuack
()
{
...
...
@@ -1883,6 +1886,7 @@ public class Duck {
```
java
public
class
Client
{
public
static
void
main
(
String
[]
args
)
{
Duck
duck
=
new
Duck
();
duck
.
setQuackBehavior
(
new
Squeak
());
...
...
@@ -2706,6 +2710,7 @@ public class Mocha extends CondimentDecorator {
```
java
public
class
Client
{
public
static
void
main
(
String
[]
args
)
{
Beverage
beverage
=
new
HouseBlend
();
beverage
=
new
Mocha
(
beverage
);
...
...
@@ -2845,6 +2850,7 @@ public class FlyweightFactory {
```
java
public
class
Client
{
public
static
void
main
(
String
[]
args
)
{
FlyweightFactory
factory
=
new
FlyweightFactory
();
Flyweight
flyweight1
=
factory
.
getFlyweight
(
"aa"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录