《head first》学习笔记之一

《head first》学习笔记
设计原则

第一个设计原则:
找出应用中可能需要变化之处,把他们独立出来“封装”,不要和那些不需要变化的代码混在一起。
如:将Duck类的fly()和quack()行为独立出来。

第二个设计原则:
针对接口编程,而不是针对实现编程。
将fly和quack分别设计成接口,Duck类不用实现该接口,而是由单独制造其他类专门实现接口,这个类称为“行为类”由行为类而不是Duck类来实现行为接口。


package net.roky.pattern.first;

public interface FlyBehavior {
public void fly();
}


package net.roky.pattern.first;

public class Fly1 implements FlyBehavior {
public void fly(){
System.out.println("I can fly with wings.");
}
}


package net.roky.pattern.first;

public class Fly2 implements FlyBehavior {
public void fly() {
System.out.println("I can't fly.");
}
}


package net.roky.pattern.first;

public class Fly3 implements FlyBehavior {

public void fly() {
System.out.println("I can fly with rocket.");

}

}


package net.roky.pattern.first;

public interface QuackBehavior {
public void quack();
}


package net.roky.pattern.first;

public class Quack1 implements QuackBehavior {

public void quack() {
System.out.println("gaga...gaga..");
}

}


package net.roky.pattern.first;

public class Quack2 implements QuackBehavior{
public void quack(){
System.out.println("gugu...gugu...");
}
}


package net.roky.pattern.first;

public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;

public void setFlyBehavior(FlyBehavior f){
this.flyBehavior = f;
}

public void setQuackBehavior(QuackBehavior q){
this.quackBehavior = q;
}

public abstract void display();

public void swim(){
System.out.println("I'm a duck, I can swim.");
}

public void performFlyBehavior(){
flyBehavior.fly();
}

public void performQuackBehavior(){
quackBehavior.quack();
}
}


package net.roky.pattern.first;

public class Duck1 extends Duck{
public Duck1(){
System.out.println("Duck1....................");
super.flyBehavior = new Fly1();
super.quackBehavior = new Quack2();
}

public void display(){
System.out.println("------Duck1");
}
}


package net.roky.pattern.first;

public class Duck2 extends Duck {

public Duck2(){
System.out.println("Duck2....................");
super.flyBehavior = new Fly2();
super.quackBehavior = new Quack1();
}

public void display() {
System.out.println("------Duck2");
}

}


package net.roky.pattern.first;

public class Main {
public static void main(String[] args){
Duck duck = new Duck1();
duck.swim();
//在构造器中设置对象
duck.performFlyBehavior();
duck.performQuackBehavior();

//使用setXXX方法设置对象
duck.setFlyBehavior(new Fly2());
duck.setQuackBehavior(new Quack2());
duck.performFlyBehavior();
duck.performQuackBehavior();

duck = new Duck2();
duck.swim();
//在构造器中设置对象
duck.performFlyBehavior();
duck.performQuackBehavior();
//使用setXXX方法设置对象
duck.setFlyBehavior(new Fly3());
duck.setQuackBehavior(new Quack1());
duck.performFlyBehavior();
duck.performQuackBehavior();

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值