- 浏览: 497083 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (250)
- concurrent (11)
- io (1)
- CI (10)
- linux (57)
- windows (2)
- java (38)
- mac (4)
- eclipse (9)
- db (13)
- python (5)
- groovy (5)
- flex (7)
- hibernate (5)
- odb (8)
- netbeans (1)
- web (31)
- book (14)
- erlang (2)
- communication (2)
- virtualization (5)
- jUnit (0)
- jsf (1)
- perl (1)
- java jax-rs (5)
- Jenkins (2)
- Jenkins Plugin (3)
- android (2)
- git (1)
- big data (0)
- 试读 (1)
最新评论
-
yzzy4793:
讲的很清楚,明白
同步synchronized方法和代码块 -
aa51513:
中文乱码式硬伤
Jersey2.x对REST请求处理流程的分析 -
feiwomoshu1991:
...
同步synchronized方法和代码块 -
marshan:
启动失败的原因是加载的类版本冲突,因此你首先要保证依赖的版本和 ...
richfaces中facelet版本升级到2时的典型错误和解决办法 -
zhaohang6688:
请问我按照你的方式修改还是报错 错误信息还是这个 是为什么啊 ...
richfaces中facelet版本升级到2时的典型错误和解决办法
首先看看维基百科中对7个结构模式的定义 from Wikipedia, the free encyclopedia
Structural patterns
Adapter 适配
allows classes with incompatible interfaces to work together by wrapping its own interface around that of an already existing class.
Bridge 桥梁
decouples an abstraction from its implementation so that the two can vary independently.
Composite
composes zero-or-more similar objects so that they can be manipulated as one object.
Decorator 装饰
dynamically adds/overrides behaviour in an existing method of an object.
Facade
provides a simplified interface to a large body of code.
Flyweight
reduces the cost of creating and manipulating a large number of similar objects.
Proxy 代理
provides a placeholder for another object to control access, reduce cost, and reduce complexity.
合成,门户和享元相对独立,比较好分辨。
这里仅仅对适配,装饰和代理进行辨析。
适配的目的是匹配两个不同的接口。
装饰的目的是增强接口的实现。
代理的目的是有代理对象控制原对象,不改变接口。
这里给出例子
假设有饭店和咖啡厅两个接口。我们希望实现了咖啡厅的类,可以去做饭店的事情,就是适配,增强咖啡厅自身功能就是装饰,对咖啡连锁供应商的调度就是代理。
package mars.designpattern.info;
public interface 饭店 {
void 提供饭菜();
void 提供啤酒();
}
package mars.designpattern.info;
public interface 咖啡厅 {
void 提供西点();
void 提供咖啡();
void 提供音乐();
void 提供上网();
}
package mars.designpattern.structural;
import mars.designpattern.info.咖啡厅;
import mars.designpattern.info.饭店;
import mars.designpattern.info.impl.星巴克;
public class 适配 implements 饭店 {
private 咖啡厅 中关村店 = new 星巴克();
@Override
public void 提供饭菜() {
中关村店.提供西点();
中关村店.提供咖啡();
}
@Override
public void 提供啤酒() {
// 这个真没有
}
}
package mars.designpattern.structural;
import java.util.Queue;
import mars.designpattern.info.咖啡厅;
public class 装饰 implements 咖啡厅 {
private 咖啡厅 基础店 = new 星巴克();
private void 提供苹果笔记本() {
System.out.println("苹果笔记本 2小时内免费租用");
}
private void 咖啡杯服务() {
System.out.println("根据会员资料,免费提供一个12星座咖啡杯,并免费帮助寄存");
}
private void 点播服务(){
System.out.println("提供有偿点播服务");
}
private Queue 订餐;
public void 订餐(){
System.out.println("提供订餐电话");
订餐.add("订餐信息");
}
private void 提供外卖(){
System.out.println("根据订餐信息 免费送货");
}
@Override
public void 提供上网() {
基础店.提供上网();
提供苹果笔记本();
System.out.println("无线宽带");
}
@Override
public void 提供咖啡() {
基础店.提供咖啡();
System.out.println("手工研磨");
咖啡杯服务();
if(订餐.remove("订餐信息")){
提供外卖();
}
}
@Override
public void 提供西点() {
基础店.提供西点();
}
@Override
public void 提供音乐() {
基础店.提供音乐();
点播服务();
}
}
package mars.designpattern.structural;
import mars.designpattern.info.咖啡厅;
import mars.designpattern.info.impl.星巴克;
public class 代理 implements 咖啡厅 {
星巴克 星巴克注册者;
private void 记账(){
}
@Override
public void 提供上网() {
星巴克注册者.提供上网();
}
@Override
public void 提供咖啡() {
星巴克注册者.提供咖啡();
记账();
}
@Override
public void 提供西点() {
星巴克注册者.提供西点();
记账();
}
@Override
public void 提供音乐() {
星巴克注册者.提供音乐();
}
}
评论
有道理。我偷懒了。增加了"基础店"。谢谢。
有时候经常为一个变量的命名头痛半天。
楼主这个仅仅只是举的一个例子,是为了方便理解、、、
实际应用当中是不可能用中文来做变量名的、、、
否则会出现很多莫名其妙的问题、、、
有时候经常为一个变量的命名头痛半天。
发表评论
-
拥抱Java8第一弹
2014-01-17 11:59 2719package creative.air.java8.com ... -
Log4j2 整理
2013-12-09 12:25 808http://logging.apache.org/log4j ... -
profilers
2013-12-01 20:15 739SonarQube http://www.sonarqu ... -
JProfiler download
2013-12-01 20:01 1103Version: 8.0.1 (2013-07-31) h ... -
yjp download
2013-12-01 19:12 1089Download YourKit Java Profile ... -
Ubuntu中Java IDE启动器配置
2013-09-23 11:06 1422sudo nano /usr/share/applicati ... -
JAVA SYS TIME
2013-07-29 07:50 1058public class TestSys { //@Tes ... -
计划任务的顺序执行[Quartz Scheduler v.2.1.6]
2013-04-07 13:39 7790使用Quartz做计划任务时,默认情况下,当前任务总会执行 ... -
test list
2013-01-21 16:05 1029import java.util.ArrayList; p ... -
使用HashMap实现缓存
2012-09-07 01:28 4179本类开发中 欢迎拍砖 重伤我者 必须答谢! 实现: ... -
architect mark
2012-07-25 23:46 9641Z0_864 1Z0_865 1Z0 ... -
Windows下多版本Java并存问题
2012-05-01 23:59 9723跨平台的Java配置如下: C:\Users\Admi ... -
使用gitHub下载richfaces代码
2011-12-28 17:40 1542richfaces的源代码位于 https://github. ... -
jvm command
2011-10-18 22:05 1039/System/Library/Java/Java ... -
[童虎退壳系列]判等与哈希值的覆写
2011-10-13 01:57 1112public final class EqualsHas ... -
Java枚举
2011-06-22 10:00 867public enum TransportTy ... -
highcharts在richfaces下的实现
2011-01-12 19:40 3227highcharts是优秀的javascript图表生成工具( ... -
使用richfaces玩转json
2011-01-10 18:16 4439richfaces封装了jQuery和json,因此我们在ri ... -
JSF项目打包
2010-09-05 22:30 1176同事问我,JSF项目发布的时候,为什么编译后的类放在class ... -
SLF4J version conflict
2010-08-31 11:21 1644Here are the exception detail ...
相关推荐
3. **当系统只有一种产品族时,抽象工厂模式显得过于繁琐,简单工厂模式或构造函数可能更为合适。 在编程实践中,抽象工厂模式常用于框架和库的设计,例如GUI库中的窗口系统,不同操作系统(如Windows、Linux)需要...
数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象。=> 数据模型是数据本身结构的结构,二重抽象。 《数据库系统概念》给数据模型下的定义是:a collection of conceptual tools for de
大数据分析与情报分析关系辨析 大数据分析(Big Data Analytics,BDA)是近年来图书情报领域备受关注的焦点,它是指对海量、多样化、迅速增长且具有真实内容的数据进行深入挖掘,以揭示隐藏的模式、未知的相关性...
6. **应对策略**:考生在复习时,应加强阅读训练,提高语感,同时要系统学习和练习各种病句类型,熟悉常见的错误模式,并通过做题实践来巩固和提升辨析能力。 7. **实践应用**:在实际生活中,避免使用病句能有效...
数据挖掘与数学建模的联系在于它们都依赖于统计学和优化方法,但数据挖掘更侧重于自动化和在海量数据中寻找结构。 商业分析则更偏向于业务层面,关注如何利用数据驱动决策,提高企业的运营效率和盈利能力。它结合了...
3. **联合银行模式**: - 联合银行模式与省联社模式在股权关系和管理体制上相似,但联合银行能承担更多的职能,例如金融市场业务、集团客户业务和金融科技业务,以增强成员行的竞争力。 - 相比控股银行模式,联合...
在实际考试中,考生需要对病句的六大类型有深入的理解,并能准确判断句子是否存在问题以及问题所在。其中,“搭配不当”和“成分残缺或赘余”是近年来高频考查的病句类型,尤其是“搭配不当”,它是病句辨析中的首要...
在高考语文复习中,语言文字运用部分是一个重要的环节,特别是针对病句的辨析与修改,这是考生必须掌握的技能。2020年高考语文的趋势是将辨析型客观题逐渐转化为修改型主观题,这对考生的要求提高了,需要他们不仅...
例如,"宪法是国家的根本大法",答题时应强调宪法的内容、效力和制定程序上的特殊性,以证明其根本地位。 2. 完全否定型:对于错误的观点,首先要指出错误之处,说明理由和可能产生的危害,再提出正确的观点。例如...
数据结构从逻辑上可以分为线性结构和非线性结构两大类。第七题中,选项C“线性结构、非线性结构”准确描述了这一分类,其中线性结构如数组、链表,非线性结构如树、图。 #### 8. 与数据存储结构无关的术语 第八题...
从体系视角分析,新媒体是一个多层次的结构,包括新型网络、新型数据处理模式、新型计算模式、新型访问浏览模式、新型应用模式和新型终端。这些层面共同构建了一个复杂的媒介生态系统,其中新型网络是支撑整个体系...
例如,玉山台地发展茭白产业得益于其丰富的水资源、适宜的气候条件(不耐寒冷、高温和干旱)、大面积的台地地形、昼夜温差大的环境(有利于养分积累)以及靠近主要消费市场的地理位置。 3. 自然因素对农业产量的...
4. 平时多积累常见病句类型和错误模式,提高识别能力。 5. 练习时,结合解析进行分析,强化理解,提升答题速度和准确性。 通过以上讲解,考生应对辨析病句这一高考热点题型有了深入的理解,通过练习和掌握技巧,...
9. **高考真题分析**:通过历年高考真题的练习,可以帮助学生熟悉考试的出题模式,了解常见病句的类型,并学会在实际语境中判断和修改病句。 10. **教学方法**:采用讲授课和习题课结合的方式,教师讲解关键知识点...
FDD模式下,上行和下行各占10个子帧,而TDD模式下,可以根据需要调整上行和下行的时隙比例。资源粒子(Resource Element, RE)是LTE系统中最小的调度单位,每个RE对应于频域的一个子载波和时域的一个OFDM符号。资源...
为了更有效地辨析和修改病句,可以灵活运用一些方法,如记住典型的错误句子并分析其结构,检查修饰语和虚词的合适位置,关注关联词语的搭配,简化句子成分等。通过这些技巧,我们可以提高语言的准确性和表达的清晰度...
其通过特殊网络技术进行数据记录,使用块链数据结构来验证和存储数据,并通过智能合约和密码学确保数据传输和访问的安全性。区块链技术能够允许多个人共同参与记账过程,让每个参与者拥有相同的账本,但又无法删除或...
在《广东省河源市八年级道德与法治下册 简答题与辨析题教学流程 新人教版(通用)》的教学文档中,主要关注的是如何有效地进行简答题与辨析题的教学,以帮助学生提升在政治学科中的应试能力。以下是关于这个教学流程...
3. **消费结构与生活质量**:浙江省文化消费的增长预示着居民家庭消费层次的提升,不再局限于基本生活需求,而是追求精神文化层面的满足,体现了消费结构的优化和生活质量的提高。 4. **家庭消费影响因素**:家庭...