- 浏览: 1243087 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
以下为针对上图所列代码:
package com.lwf.design.learn; public abstract class Duck { Flyable flyable; Quackable quackable; public void swim(){ System.out.println("duck is swim"); } public abstract void display(); public void setFlayable(Flyable flyable){ this.flyable = flyable; } public void setQuackable(Quackable quackable){ this.quackable = quackable; } public void perFormFly(){ flyable.fly(); } public void perFormQuack(){ quackable.quack(); } }
package com.lwf.design.learn; public class SubDuck extends Duck { public SubDuck(){ flyable = new NomorFly(); quackable = new GaQuack(); } public void display(){ System.out.println("subberDuck is display"); } public static void main(String[] args) { SubDuck s = new SubDuck(); s.display(); s.swim(); s.perFormFly(); s.perFormQuack(); s.setFlayable(new HighFly()); s.perFormFly(); // Quackable quackable = new GaQuack(); // s.quackable = quackable; // s.perFormQuack(); } }
package com.lwf.design.learn; public interface Flyable { public void fly(); }
package com.lwf.design.learn; public interface Quackable { public void quack(); }
package com.lwf.design.learn; public class NomorFly implements Flyable { public void fly() { System.out.println("Normal fly"); } }
package com.lwf.design.learn; public class HighFly implements Flyable { public void fly() { System.out.println("HighFly fly"); } }
package com.lwf.design.learn; public class GaQuack implements Quackable { public void quack() { System.out.println("GaQuack"); } }
package com.lwf.design.learn; public class GuQuack implements Quackable { public void quack() { System.out.println("GuQuack"); } }
设计原则:
继承会使所有子类都具有所父类一样的特性,如果使用覆盖,那么子类繁多的时候每个类都要使用覆盖。。
接口会使所有子类都实现其方法,如果子类繁多且实现的方法基本一样,那么怎么办?还使用接口吗?如果以后维护,需要更改这一特性,那么所有子类都需要修改,麻烦。
设计原则一:封装变化即找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
实际上就是把会变化的部分取出来并封装起来,以便以后轻易的改动或扩充此部分。
设计原则二:针对接口编程,而不是针对实现编程
具体的在Duck类的设计之中,将Duck与其可能变化的行为分开,即将Fly抽象成接口,并有它自己的实现类。只需在Duck类中增加Fly属性及设置该属性的方法即可。
这样利用了Duck类本身的继承及Fly类的继承特性,实际上这样有了继承的"复用"好处,而没有继承所带来的包袱。
设计原则三:多用组合,少用继承
在Duck类的设计中,类关系存在继承(is-a),组合(has-a)和实现(implements),使用组合能减少继承带来的包袱,还可以动态的改变行为。对于Duck的飞行行为和叫的行为,我们可以分别看成是算法簇,比如:我们把飞行行为抽象为接口,它可以有多个实现类,这些实现类可以相互替换,从而我们可以动态的改变行为。
策略模式的定义:
定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
UML图:
- learn.rar (1.8 KB)
- 下载次数: 4
发表评论
-
深入浅出设计模式十四——复合模式
2016-07-05 09:35 6293 -
深入浅出设计模式十一——组合模式
2016-07-05 09:31 5533 -
深入浅出设计模式十二-状态模式(行为型)
2010-07-20 16:27 1644定义: 状态模式: 允许对象在内部状态改变时改变它的行为 ... -
深入浅出设计模式十——迭代模式
2010-07-19 14:24 946我 -
代理模式\装饰模式\适配器模式区别
2010-07-16 17:16 2431代理模式\装饰模式\适配器模式它们有相似性,那么具体在什么情况 ... -
深入浅出设计模式十三——代理模式(结构型)
2010-07-16 11:29 893以下两篇文章分别讲了静态代理与动态代理 http://qu ... -
深入浅出设计模式九——模板方法模式(行为型)
2010-07-14 16:12 1041模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟 ... -
GRASP原则简介
2010-03-10 17:38 2436GRASP(General Responsibilit ... -
深入浅出设计模式六——封装调用(命令模式)
2010-03-08 15:35 1140命令模式: 将一个请求封装为一个对象,从而使你可用不同的请 ... -
深入浅出设计模式五——独一无二(单例模式)
2010-03-08 15:34 1111先看文章 :http://quicker.iteye.com/ ... -
深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)
2010-03-05 16:17 1309有关抽象工厂文章可先看:http://quicker.itey ... -
深入浅出设计模式四——比萨店生产比萨实现(工厂方法模式)
2010-03-04 17:11 2423在http://quicker.iteye.com/blog/ ... -
深入浅出设计模式三——Beverage实现(装饰者模式)
2010-03-03 17:31 1345上图的实现代码见 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现二
2010-03-02 17:24 1242在上文:深入浅出设计模式二——WeatherData设计(观察 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现一
2010-03-01 14:31 1646UML详细图 良好的OO ... -
深入浅出设计模式七——Adapter模式(结构型)
2010-02-22 15:45 1159将两个不兼容的类或者说没有关系的类纠合在一起使用。就要在使用 ... -
深入浅出设计模式八——Facade模式(结构型)
2010-02-22 15:06 1875外观模式定义: 外观模式:提供一个统一的接口,用来访问子系统 ... -
创建型——Builder模式
2010-02-04 16:04 1010UML: 如何使用: ... -
创建型(单例模式)
2010-01-26 11:39 1041package com.lwf.create.singleto ... -
创建型——工厂模式(抽象工厂)
2010-01-19 23:56 1080UML图 特例图 以图的实现代码: ...
相关推荐
正如本书章标题所示,“深入浅出设计模式”,正是希望通过剖析设计模式背后的原理和实践,帮助读者不仅学会使用模式,更能理解和吸收模式背后的思维逻辑,从而在自己的设计和应用中灵活运用,最终达到“把模式装进...
### 深入浅出设计模式 #### 一、引言 在软件开发领域,设计模式是一种被广泛接受和使用的编程技巧,它可以帮助开发者解决常见的软件设计问题。本文通过一个具体的例子——“模拟鸭子”应用程序,来阐述设计模式的...
### 深入浅出设计模式第一章中文 #### 引言 在软件工程领域,设计模式作为一种被广泛接受和使用的编程技巧,对于提高代码的可读性、可维护性和可扩展性具有重要意义。本章主要介绍了设计模式的概念、为什么需要使用...
### 深入浅出设计模式培训课件_2 #### 一、设计模式概述 设计模式是在软件设计和开发过程中不断总结出的、反映某一类设计问题的解决方案。它们通过对现实生活中某些常见问题的抽象,提供了一套成熟且经过验证的...
《Head First Design Patterns》通过生动的例子和深入浅出的解释,不仅让读者掌握了设计模式的具体应用,还教会了如何在实践中运用这些模式来优化代码结构,提高软件质量。对于想要提升自己在Java编程领域技能的...