首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

《head first》学习札记之一

2012-11-01 
《head first》学习笔记之一《head first》学习笔记设计原则第一个设计原则:找出应用中可能需要变化之处,把他

《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();}}

热点排行