head first design pattern 读后感

这是我看的第一本设计模式方面的书 惊为天书
目前看到的觉得写的最棒的一本技术书籍
作者通过各种方式与读者形成了互动 使读书不再是个枯燥的过程
书上写了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...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值