设计模式学习《一》
来源:互联网 发布:影楼网络推广 编辑:程序博客网 时间:2024/04/29 10:21
这是一只鸭子类的设计图,其中所有鸭子都会SWIN()和Display();但并不都会fly和quack,下图设计就是把fly和quack两中行为变为接口。
这中模式的不足之处在那? 1, 重复的代码会变多,如果子类很多,那么每个子类都要修改下fly这个方法。 2, 代码的复用性很差。 3, 如果此时代码的quack()的实现需要修改下,以前的“呱呱叫”现在要修改成“呱呱呱呱叫”那么的还需要找到所有实现“呱呱叫”的类去修改,这样就很容易造成新的错误。 修改以上方法思路: 把会变化的的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。 1.同样定义接口fly和quack只是将fly和quack实现各自的动作行为类。如:会飞的类,不会飞的类。这样就将fly和quack从鸭子里分开了。
2.看下代码的实现
这里FlyImpl和QuackImpl分别是飞行和叫的借口,而flynoway和Flywithwings是flyImpl的具体实现类,分别是会飞和不会飞类。同样quack和quackMute也是quack接口的具体实现类分别表示会叫和不会叫的。
看下duck类的代码:
Duck类中加入2个实例变量,分别为flyImpl和quackImpl声明为借口类型。每个鸭子都会动态地设置这些变量以在运行时引用准确的行为类型。
看下蓝鸭子的具体实现类:
蓝鸭子在构造器中就声明了自己的行为 表示会飞和不会叫。
运行代码:
- 设计模式学习(一)
- 设计模式学习《一》
- 设计模式学习(一)
- 设计模式学习笔记一
- 学习设计模式(一) Builder
- 设计模式学习笔记 一
- 设计模式学习笔记(一)
- 学习设计模式随笔(一)
- java设计模式学习一
- 设计模式学习(一)
- 设计模式学习(一)
- 设计模式学习前奏一
- 设计模式学习(一)
- swift设计模式学习一
- 学习设计模式(一)
- 设计模式学习(一)
- 设计模式学习笔记(一)
- 设计模式学习(一)
- Creating Office Solutions for Use in Multiple Countries/Regions(创建区域语言无关的操作excel的程序)
- MSN Messenger无法登陆的另类解决办法
- Bluetooth协议栈学习之SDP
- 干蝴蝶
- 实战Linux Bluetooth编程(一) 协议栈概述
- 设计模式学习《一》
- java profiler
- 实战Linux Bluetooth编程(二) BlueZ简介
- C语言运算符优先级 详细列表
- 实战Linux Bluetooth编程(三) HCI层编程
- ExecutorService来进行线程池的方式实现多线程
- 实战Linux Bluetooth编程(四) L2CAP层编程
- 实战Linux Bluetooth编程(五) Socket与Bluetooth
- 构建多线程Java 应用程序