六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 66|回复: 0

head first design pattern 读后感

[复制链接]

升级  90%

13

主题

13

主题

13

主题

童生

Rank: 1

积分
45
 楼主| 发表于 2013-1-15 02:17:27 | 显示全部楼层 |阅读模式
这是我看的第一本设计模式方面的书 惊为天书
目前看到的觉得写的最棒的一本技术书籍
作者通过各种方式与读者形成了互动 使读书不再是个枯燥的过程
书上写了23种设计模式中更为常见的14种设计模式
让我做个小小的回顾

1.策略模式
一只鸭子本来是可以飞的 翅膀如果被我打坏了 就不能飞了
如果修好了 又能飞
duck.fly();
如何才能在运行时改变鸭子的行为方式
java是一种无法改变类结构的语言
通过接口和组合 我们能达到这种效果
//code complete
package design_pattern;interface Flyable {void fly();}class FlyHigh implements Flyable{public void fly(){System.out.println("this is a super fly duck");}}class FlyNormal implements Flyable {public void fly() {System.out.println("fly just as a normal duck");}}class FlyBad implements Flyable {public void fly() {System.out.println("cooked duck connot fly ");}}class Duck {protected Flyable flyBehavior;public void performFly() {flyBehavior.fly();}}class RedDuck extends Duck {public RedDuck() {flyBehavior=new FlyNormal();}public void setFlyProperty(Flyable fly){flyBehavior=fly;}}public class Strategy {public static void main(String[] args){RedDuck aRedDuck=new RedDuck();aRedDuck.performFly();System.out.println("i teach the red duck to be a genius air duck ...");aRedDuck.setFlyProperty(new FlyHigh());aRedDuck.performFly();System.out.println("the duck 不乖   ,so i hit and cook it...");aRedDuck.setFlyProperty(new FlyBad());aRedDuck.performFly();}}
应该很好懂 通过组合 我们能实现继承不能达到的灵活性
可以在运行时改变行为 这种设计 叫做策略设计模式

2.观察者模式
在老和尚职业技术学院电脑培训班 大家都知道著名的片王 腾飞同学
很多同学 比如咸菜 徐大湿 性男 都想在腾飞更新片的第一时刻得到通知
怎么做才能达到这种效果了
下面是专门为有这种需求的同学写的代码
package design_pattern;import java.util.*;interface Subject{void registerObserver(Observer ... o);void removeObserver(Observer ... o);void notifObserver();}interface Observer{void watch(String movie);}class 腾飞 implements Subject{List<Observer> observers=new ArrayList<Observer>();private String movie;public void notifObserver() {for(Observer o : observers)o.watch(movie);}public void registerObserver(Observer ... os) {for(Observer o: os)observers.add(o);}public void removeObserver(Observer ... os) {for(Observer o: os)observers.remove(o);}public void SetMovie(String movie){this.movie=movie;notifObserver();}}class 性男 implements Observer{public 性男(Subject s){s.registerObserver(this);}public void watch(String movie){System.out.println("我是腾飞的代理 第一个看到片 ");System.out.println("迷离的看着"+movie);}}class 徐大湿 implements Observer{public 徐大湿(Subject s){s.registerObserver(this);}public void watch(String movie){System.out.println("我是电脑培训班第一大湿 ");System.out.println("销魂的看着"+movie);}}class 咸菜 implements Observer{public 咸菜(Subject s){s.registerObserver(this);}public void watch(String movie){System.out.println("腾飞有片居然不第一个通知我 ");System.out.println("陶醉的看着"+movie);}}public class Circusee {public static void main(String[] args){腾飞 pianKing=new 腾飞();new 性男(pianKing);new 徐大湿(pianKing);new 咸菜(pianKing);pianKing.SetMovie("玉女心经");pianKing.SetMovie("苍井空新片");}}
to be continued...
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表