设计模式模式学习
//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;
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();
public String swim(){ return "Duck can swim"; }
public String fly(){ return this.flyBehavior.fly(); }
public String call(){ return this.callBehavior.call(); }
public void setFlyBehavior(DefaultFlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; }
public void setCallBehavior(CallBehavior callBehavior) { this.callBehavior = callBehavior; }
}
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"); } }
|
设计模式–观察者模式
基本理念
- 超出程序中变化的部分,然后将这些和固定不变的部分分离开
- 针对接口编程,不针对实现编程
- 多用组合少用继承.