设计模式学习《一》

来源:互联网 发布:影楼网络推广 编辑:程序博客网 时间:2024/04/29 10:21

这是一只鸭子类的设计图,其中所有鸭子都会SWIN()Display();但并不都会flyquack,下图设计就是把flyquack两中行为变为接口。

 

 

1

 

 

这中模式的不足之处在那?

1,  重复的代码会变多,如果子类很多,那么每个子类都要修改下fly这个方法。

2,  代码的复用性很差。

3,  如果此时代码的quack()的实现需要修改下,以前的“呱呱叫”现在要修改成“呱呱呱呱叫”那么的还需要找到所有实现“呱呱叫”的类去修改,这样就很容易造成新的错误。

修改以上方法思路:

把会变化的的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。

1.同样定义接口flyquack只是将flyquack实现各自的动作行为类。如:会飞的类,不会飞的类。这样就将flyquack从鸭子里分开了。

 

 2

 

2.看下代码的实现

 

3

 

这里FlyImplQuackImpl分别是飞行和叫的借口,而flynowayFlywithwingsflyImpl的具体实现类,分别是会飞和不会飞类。同样quackquackMute也是quack接口的具体实现类分别表示会叫和不会叫的。

看下duck类的代码:

 

 

Duck类中加入2个实例变量,分别为flyImplquackImpl声明为借口类型。每个鸭子都会动态地设置这些变量以在运行时引用准确的行为类型。

看下蓝鸭子的具体实现类:

 

蓝鸭子在构造器中就声明了自己的行为 表示会飞和不会叫。

运行代码:

 

 

 

 

 

原创粉丝点击