`

3大结构模式辨析

    博客分类:
  • java
阅读更多

首先看看维基百科中对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 提供音乐() {
        星巴克注册者.提供音乐();
    }
}

 

分享到:
评论
6 楼 marshan 2010-05-06  
mococa 写道
装饰的例子讲得不太好,有装饰者但没有被装饰者


有道理。我偷懒了。增加了"基础店"。谢谢。
5 楼 mococa 2010-05-05  
装饰的例子讲得不太好,有装饰者但没有被装饰者
4 楼 lxs647 2010-05-05  
hellojinjie 写道
问下,你们在真实的开发中有用过中文的变量名和方法名吗,,

有时候经常为一个变量的命名头痛半天。


楼主这个仅仅只是举的一个例子,是为了方便理解、、、
实际应用当中是不可能用中文来做变量名的、、、
否则会出现很多莫名其妙的问题、、、
3 楼 hellojinjie 2010-05-05  
问下,你们在真实的开发中有用过中文的变量名和方法名吗,,

有时候经常为一个变量的命名头痛半天。
2 楼 prowl 2010-05-05  
例子很生动,支持一个。
1 楼 jadewoo 2010-05-05  
楼主举的例子很生动,我看了后,使设计模式迷惑了很久的我有个大概的理解!顶了

相关推荐

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    3. **当系统只有一种产品族时,抽象工厂模式显得过于繁琐,简单工厂模式或构造函数可能更为合适。 在编程实践中,抽象工厂模式常用于框架和库的设计,例如GUI库中的窗口系统,不同操作系统(如Windows、Linux)需要...

    【数据库系统】数据模型、模式、数据的概念辨析

    数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象。=> 数据模型是数据本身结构的结构,二重抽象。 《数据库系统概念》给数据模型下的定义是:a collection of conceptual tools for de

    大数据分析与情报分析关系辨析_李广建1

    大数据分析与情报分析关系辨析 大数据分析(Big Data Analytics,BDA)是近年来图书情报领域备受关注的焦点,它是指对海量、多样化、迅速增长且具有真实内容的数据进行深入挖掘,以揭示隐藏的模式、未知的相关性...

    数据分析总结 理论 术语概念的辨析.zip.zip

    数据挖掘与数学建模的联系在于它们都依赖于统计学和优化方法,但数据挖掘更侧重于自动化和在海量数据中寻找结构。 商业分析则更偏向于业务层面,关注如何利用数据驱动决策,提高企业的运营效率和盈利能力。它结合了...

    省联社改革为联合银行的正当性辨析及建议.pdf

    3. **联合银行模式**: - 联合银行模式与省联社模式在股权关系和管理体制上相似,但联合银行能承担更多的职能,例如金融市场业务、集团客户业务和金融科技业务,以增强成员行的竞争力。 - 相比控股银行模式,联合...

    语言文字运用辨析病句PPT课件.pptx

    在实际考试中,考生需要对病句的六大类型有深入的理解,并能准确判断句子是否存在问题以及问题所在。其中,“搭配不当”和“成分残缺或赘余”是近年来高频考查的病句类型,尤其是“搭配不当”,它是病句辨析中的首要...

    行业教育软件-学习软件-软件下载_学习软件_等级考试_四级词汇结构之同义词和近义词辨析4免费下载.zip

    今天要介绍的这款软件,名为“行业教育软件-学习软件-软件下载_学习软件_等级考试_四级词汇结构之同义词和近义词辨析4”,专为应对英语四级考试的词汇理解与运用部分而设计。 四级词汇结构是英语四级考试的核心内容...

    2020新高考语文二轮复习第四部分语言文字运用专题八针对提升三想全辨析角度表达准确流畅__辨析并修改蹭教学案2020031904

    在高考语文复习中,语言文字运用部分是一个重要的环节,特别是针对病句的辨析与修改,这是考生必须掌握的技能。2020年高考语文的趋势是将辨析型客观题逐渐转化为修改型主观题,这对考生的要求提高了,需要他们不仅...

    2021版高考语文一轮复习专题十辨析并修改蹭2辨析蹭课件新人教版

    另一方面,系统学习各种病句类型,通过归纳总结常见的错误模式,同时通过做题实践来巩固和提升辨析能力。例如,可以搜集历年高考真题和模拟试题中的病句辨析题目,进行专题训练,从而达到举一反三的效果。 此外,...

    2020中考政治辨析题答题技巧.docx

    例如,"宪法是国家的根本大法",答题时应强调宪法的内容、效力和制定程序上的特殊性,以证明其根本地位。 2. 完全否定型:对于错误的观点,首先要指出错误之处,说明理由和可能产生的危害,再提出正确的观点。例如...

    数据结构考研1800题 历年考研真题大全 答案

    数据结构从逻辑上可以分为线性结构和非线性结构两大类。第七题中,选项C“线性结构、非线性结构”准确描述了这一分类,其中线性结构如数组、链表,非线性结构如树、图。 #### 8. 与数据存储结构无关的术语 第八题...

    自交与自由交配辨析.pdf

    自交与自由交配作为两种基本的交配模式,其辨析对于深入理解生物的遗传机制和种群遗传多样性具有关键意义。本文旨在从理论和实践的角度详细辨析自交与自由交配的概念、特点以及它们对后代基因型频率的影响。 自交,...

    02-网络与新媒体的概念辨析和层次模型PPT.pptx

    从体系视角分析,新媒体是一个多层次的结构,包括新型网络、新型数据处理模式、新型计算模式、新型访问浏览模式、新型应用模式和新型终端。这些层面共同构建了一个复杂的媒介生态系统,其中新型网络是支撑整个体系...

    新课标2020高考地理二轮复习考前刷题练专题3非选择题题型突破6辨析评价类练习

    例如,玉山台地发展茭白产业得益于其丰富的水资源、适宜的气候条件(不耐寒冷、高温和干旱)、大面积的台地地形、昼夜温差大的环境(有利于养分积累)以及靠近主要消费市场的地理位置。 3. 自然因素对农业产量的...

    2018年高考语文热点题型和提分秘籍专题05辨析并修改蹭含解析.doc

    4. 平时多积累常见病句类型和错误模式,提高识别能力。 5. 练习时,结合解析进行分析,强化理解,提升答题速度和准确性。 通过以上讲解,考生应对辨析病句这一高考热点题型有了深入的理解,通过练习和掌握技巧,...

    安徽省长丰县实验高级中学2017届高考语文一轮复习教案:辨析并修改病句(含反思).pdf

    每种病句类型背后都有其特定的错误模式和辨析方法。 对于语序不当的病句,教案中提到,名词附加语的定语顺序、动词附加语的状语顺序以及虚词位置均是易错点。如名词附加语中,形容词通常应置于数量短语之前,而动词...

    2014届高三语文总复习 专题五 辨析并修改病句课件 新人教版

    9. **高考真题分析**:通过历年高考真题的练习,可以帮助学生熟悉考试的出题模式,了解常见病句的类型,并学会在实际语境中判断和修改病句。 10. **教学方法**:采用讲授课和习题课结合的方式,教师讲解关键知识点...

    LTE重要概念辨析

    FDD模式下,上行和下行各占10个子帧,而TDD模式下,可以根据需要调整上行和下行的时隙比例。资源粒子(Resource Element, RE)是LTE系统中最小的调度单位,每个RE对应于频域的一个子载波和时域的一个OFDM符号。资源...

    辨析并修改病句技巧解析.doc

    为了更有效地辨析和修改病句,可以灵活运用一些方法,如记住典型的错误句子并分析其结构,检查修饰语和虚词的合适位置,关注关联词语的搭配,简化句子成分等。通过这些技巧,我们可以提高语言的准确性和表达的清晰度...

Global site tag (gtag.js) - Google Analytics