策略模式 场景 算法簇:不同级别的用户,支付级别不同。
设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 interface IPay { void pay () ; } class VipPay implements IPay ;class CustomPay implements IPay ;class User:{ IPay pay; void setPay (IPay pay) ; void pay () { pay.pay(); } }
角色
策略接口
策略实现
使用策略的上下文(对应上面例子例子中有需要支付功能的用户)
观察者模式 场景 订阅场景:粉丝时刻关注明星的动态。
设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Subject { ArrayList<Observer> observers; regist(Observer o); unregist(Observer o); notifyAll(Message msg){ for each : observers observer.onChange(msg); } } interface Observer { void onChange (Message msg) ; } class fan1 implements Observer { void onChange (Message msg) ; } class fan2 implements Observer { void onChange (Message msg) ; }
角色 被观察者:subject
观察者:(接口以及实现)
装饰者模式 场景 不用继承扩展原有类的功能:男生->有车的男生-> 有房子的男生。。。
java I/0流:
InputStream(实体基类)
FileInputStream(实体的实现)
FilterInputStream(装饰器基类)
BufferedInputStream(装饰器实现)
设计 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 interface Man { void getDec () ; } class NormalMan implements Man { void getDec () { print "normal man" ; } } class Decorator implements Man { Man man; public ManDecorator (Man man) { this .man=man; } void getDec () { man.getDec(); } } class CarDecorator extends Decorator { public CarDecorator (Man man) { super (man); } void getDec () { super .getDec(); print "have car" ; } } class HouseDecorator extends Decorator { public CarDecorator (Man man) { super (man); } void getDec () { super .getDec(); print "have house" ; } } 使用: public static void main (String[] args) { Man man = new NormalMan(); Man man1 = new CarDecorator(man); Man man2 = new HouseDecorator(man1); man2.getDec(); }
角色
实体的基类:对应man
实体的实现:对应normalMan
装饰器的基类(实现了实体基类):对应decorator
装饰器的实现:对应CarDecorator. HouseDecorator;