0%

设计模式学习一

设计模式模式学习

//TODO

设计模式–迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

最近在看List/ArrayList/LinkedList,明白了底层的实现方式,就在想,是不是自己可以也模仿写一个简单的ArrayList

类图

设计模式–策略模式

基本概念

策略模式定义了算法族,分别封装起来.让他们之间可以互相替换,这个模式让算法的变化可以独立于使用算法的客户

如果有个简单的需求,有一个鸭子,所有鸭子都是会游泳的,可以叫.可以飞,可以展示自己羽毛的颜色.
大家都知道,有一个Duck的抽象类.继承自抽象类的鸭子又可以自定义自己的display()方法来展示自己羽毛的颜色.
下面是一个简单的鸭子(Duck)的抽象类.

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public abstract class Duck {

/**
* 飞行行为的接口
* 当符合飞行行为的接口的时候都可以使用不管是坐着火箭飞行,还是扇着翅膀飞行
**/
private FlyBehavior flyBehavior;
/**
* 喊叫行为的接口
* 当符合喊叫行为接口的都可以放进来,不管是gaga 还是吱吱叫
**/
private CallBehavior callBehavior;

public Duck(FlyBehavior flyBehavior, CallBehavior callBehavior) {
this.flyBehavior = flyBehavior;
this.callBehavior = callBehavior;
}

Duck() {
this.flyBehavior = new DefaultFlyBehavior();
this.callBehavior = new DefaultCallBehavior();
}

/**
* 展示自己
*/
public abstract void display();

/**
* 可以游泳
* @return
*/
public String swim(){
return "Duck can swim";
}

/**
* 飞行的方法,但是具体的实现不知道是谁
* 在构造方法的时候确定"飞行这个行为是怎么做的;
* @return
*/
public String fly(){
return this.flyBehavior.fly();
}

/**
* 鸭子叫的行为,但是这个行为不知道具体是怎么喊叫的.
* 只有在真正的行为实现上才知道
* @return
*/
public String call(){
return this.callBehavior.call();
}
/**
* 在使用中动态的改变飞行的具体实现
* @param flyBehavior
*/
public void setFlyBehavior(DefaultFlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}

/**
* 在鸭子使用中动态的定义鸭子叫声 可能是吱吱 或者嘎嘎
* 只要是实现了CallBehavior接口的都可以
* @param callBehavior
*/
public void setCallBehavior(CallBehavior callBehavior) {
this.callBehavior = callBehavior;
}

}
/**
* 黄色的鸭子,这个黄色的鸭子使用默认的飞行(fly)和叫(call)的行为
**/
public class YellowDuck extends Duck {
public YellowDuck(FlyBehavior flyBehavior, CallBehavior callBehavior) {
super(flyBehavior, callBehavior);
}

public YellowDuck() {
super();
}

@Override
public void display() {
System.out.println(" I'm a Yellow Duck");
}

}

设计模式–观察者模式

基本理念

  • 超出程序中变化的部分,然后将这些和固定不变的部分分离开
  • 针对接口编程,不针对实现编程
  • 多用组合少用继承.