这是我看的第一本设计模式方面的书 惊为天书
目前看到的觉得写的最棒的一本技术书籍
作者通过各种方式与读者形成了互动 使读书不再是个枯燥的过程
书上写了23种设计模式中更为常见的14种设计模式
让我做个小小的回顾
1.策略模式
一只鸭子本来是可以飞的 翅膀如果被我打坏了 就不能飞了
如果修好了 又能飞
duck.fly();
如何才能在运行时改变鸭子的行为方式
java是一种无法改变类结构的语言
通过接口和组合 我们能达到这种效果
//code complete
应该很好懂 通过组合 我们能实现继承不能达到的灵活性
可以在运行时改变行为 这种设计 叫做策略设计模式
2.观察者模式
在老和尚职业技术学院电脑培训班 大家都知道著名的片王 腾飞同学
很多同学 比如咸菜 徐大湿 性男 都想在腾飞更新片的第一时刻得到通知
怎么做才能达到这种效果了
下面是专门为有这种需求的同学写的代码
to be continued...
目前看到的觉得写的最棒的一本技术书籍
作者通过各种方式与读者形成了互动 使读书不再是个枯燥的过程
书上写了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...