设计模式学习《一》

这是一只鸭子类的设计图,其中所有鸭子都会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声明为借口类型。每个鸭子都会动态地设置这些变量以在运行时引用准确的行为类型。

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

 

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

运行代码:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值