- 浏览: 499068 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 2722package creative.air.java8.com ... -
Log4j2 整理
2013-12-09 12:25 831http://logging.apache.org/log4j ... -
profilers
2013-12-01 20:15 743SonarQube http://www.sonarqu ... -
JProfiler download
2013-12-01 20:01 1106Version: 8.0.1 (2013-07-31) h ... -
yjp download
2013-12-01 19:12 1094Download YourKit Java Profile ... -
Ubuntu中Java IDE启动器配置
2013-09-23 11:06 1428sudo nano /usr/share/applicati ... -
JAVA SYS TIME
2013-07-29 07:50 1066public class TestSys { //@Tes ... -
计划任务的顺序执行[Quartz Scheduler v.2.1.6]
2013-04-07 13:39 7795使用Quartz做计划任务时,默认情况下,当前任务总会执行 ... -
test list
2013-01-21 16:05 1036import java.util.ArrayList; p ... -
使用HashMap实现缓存
2012-09-07 01:28 4182本类开发中 欢迎拍砖 重伤我者 必须答谢! 实现: ... -
architect mark
2012-07-25 23:46 9671Z0_864 1Z0_865 1Z0 ... -
Windows下多版本Java并存问题
2012-05-01 23:59 9729跨平台的Java配置如下: C:\Users\Admi ... -
使用gitHub下载richfaces代码
2011-12-28 17:40 1549richfaces的源代码位于 https://github. ... -
jvm command
2011-10-18 22:05 1052/System/Library/Java/Java ... -
[童虎退壳系列]判等与哈希值的覆写
2011-10-13 01:57 1122public final class EqualsHas ... -
Java枚举
2011-06-22 10:00 869public enum TransportTy ... -
highcharts在richfaces下的实现
2011-01-12 19:40 3235highcharts是优秀的javascript图表生成工具( ... -
使用richfaces玩转json
2011-01-10 18:16 4444richfaces封装了jQuery和json,因此我们在ri ... -
JSF项目打包
2010-09-05 22:30 1182同事问我,JSF项目发布的时候,为什么编译后的类放在class ... -
SLF4J version conflict
2010-08-31 11:21 1650Here are the exception detail ...
相关推荐
3. **当系统只有一种产品族时,抽象工厂模式显得过于繁琐,简单工厂模式或构造函数可能更为合适。 在编程实践中,抽象工厂模式常用于框架和库的设计,例如GUI库中的窗口系统,不同操作系统(如Windows、Linux)需要...
数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象。=> 数据模型是数据本身结构的结构,二重抽象。 《数据库系统概念》给数据模型下的定义是:a collection of conceptual tools for de
大数据分析与情报分析关系辨析 大数据分析(Big Data Analytics,BDA)是近年来图书情报领域备受关注的焦点,它是指对海量、多样化、迅速增长且具有真实内容的数据进行深入挖掘,以揭示隐藏的模式、未知的相关性...
数据挖掘与数学建模的联系在于它们都依赖于统计学和优化方法,但数据挖掘更侧重于自动化和在海量数据中寻找结构。 商业分析则更偏向于业务层面,关注如何利用数据驱动决策,提高企业的运营效率和盈利能力。它结合了...
3. **联合银行模式**: - 联合银行模式与省联社模式在股权关系和管理体制上相似,但联合银行能承担更多的职能,例如金融市场业务、集团客户业务和金融科技业务,以增强成员行的竞争力。 - 相比控股银行模式,联合...
在实际考试中,考生需要对病句的六大类型有深入的理解,并能准确判断句子是否存在问题以及问题所在。其中,“搭配不当”和“成分残缺或赘余”是近年来高频考查的病句类型,尤其是“搭配不当”,它是病句辨析中的首要...
今天要介绍的这款软件,名为“行业教育软件-学习软件-软件下载_学习软件_等级考试_四级词汇结构之同义词和近义词辨析4”,专为应对英语四级考试的词汇理解与运用部分而设计。 四级词汇结构是英语四级考试的核心内容...
在高考语文复习中,语言文字运用部分是一个重要的环节,特别是针对病句的辨析与修改,这是考生必须掌握的技能。2020年高考语文的趋势是将辨析型客观题逐渐转化为修改型主观题,这对考生的要求提高了,需要他们不仅...
另一方面,系统学习各种病句类型,通过归纳总结常见的错误模式,同时通过做题实践来巩固和提升辨析能力。例如,可以搜集历年高考真题和模拟试题中的病句辨析题目,进行专题训练,从而达到举一反三的效果。 此外,...
例如,"宪法是国家的根本大法",答题时应强调宪法的内容、效力和制定程序上的特殊性,以证明其根本地位。 2. 完全否定型:对于错误的观点,首先要指出错误之处,说明理由和可能产生的危害,再提出正确的观点。例如...
数据结构从逻辑上可以分为线性结构和非线性结构两大类。第七题中,选项C“线性结构、非线性结构”准确描述了这一分类,其中线性结构如数组、链表,非线性结构如树、图。 #### 8. 与数据存储结构无关的术语 第八题...
自交与自由交配作为两种基本的交配模式,其辨析对于深入理解生物的遗传机制和种群遗传多样性具有关键意义。本文旨在从理论和实践的角度详细辨析自交与自由交配的概念、特点以及它们对后代基因型频率的影响。 自交,...
从体系视角分析,新媒体是一个多层次的结构,包括新型网络、新型数据处理模式、新型计算模式、新型访问浏览模式、新型应用模式和新型终端。这些层面共同构建了一个复杂的媒介生态系统,其中新型网络是支撑整个体系...
例如,玉山台地发展茭白产业得益于其丰富的水资源、适宜的气候条件(不耐寒冷、高温和干旱)、大面积的台地地形、昼夜温差大的环境(有利于养分积累)以及靠近主要消费市场的地理位置。 3. 自然因素对农业产量的...
4. 平时多积累常见病句类型和错误模式,提高识别能力。 5. 练习时,结合解析进行分析,强化理解,提升答题速度和准确性。 通过以上讲解,考生应对辨析病句这一高考热点题型有了深入的理解,通过练习和掌握技巧,...
每种病句类型背后都有其特定的错误模式和辨析方法。 对于语序不当的病句,教案中提到,名词附加语的定语顺序、动词附加语的状语顺序以及虚词位置均是易错点。如名词附加语中,形容词通常应置于数量短语之前,而动词...
9. **高考真题分析**:通过历年高考真题的练习,可以帮助学生熟悉考试的出题模式,了解常见病句的类型,并学会在实际语境中判断和修改病句。 10. **教学方法**:采用讲授课和习题课结合的方式,教师讲解关键知识点...
FDD模式下,上行和下行各占10个子帧,而TDD模式下,可以根据需要调整上行和下行的时隙比例。资源粒子(Resource Element, RE)是LTE系统中最小的调度单位,每个RE对应于频域的一个子载波和时域的一个OFDM符号。资源...
为了更有效地辨析和修改病句,可以灵活运用一些方法,如记住典型的错误句子并分析其结构,检查修饰语和虚词的合适位置,关注关联词语的搭配,简化句子成分等。通过这些技巧,我们可以提高语言的准确性和表达的清晰度...