【设计模式】文章摘要 查找联系人控件

设计模式,真的非常像一个长,我们甚至从类图中存在的类图的直接进化。

他们中的一些,像类图。有些语言近似,但它有一个不同的名称,不同“马甲”。让我们快来认一认。

第一组:模板方法PK 建造者模式PK 工厂方法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDE3NjAxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="300" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDE3NjAxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="340" height="279" >

模板方法建造者模式工厂方法

三者比較:同样点,主要思想都是定义一个框架。然后将一些步骤延迟到子类。

不同点,首先。模板方法模式是行为型模式。而建造者模式工厂方法都是创建型模式。

两两比較:模板VS 建造者

建造者模式用到模板方法,他们两个的使用范围区分就看构建的算法是否须要另外创建一个类。

而承担这部分责任的则是建造者中应有的另外一个类,和其特有的指挥类。

建造者VS工厂方法

在建造者模式图中。假如把这个指挥类看做是终于调用的client,那么图中剩余的部分就能够看作是一个简单的工厂模式了。与工厂模式相比,建造者模式适用对象的创建过程更为复杂的情况,因此将对象的创建过程独立出来组成一个新的类——指挥类。

也就是说,工厂模式是将对象的所有创建过程封装在工厂类中,由工厂类向client提供终于的产品;而建造者模式中,建造者类一般仅仅提供产品类中各个组件的建造,而将详细建造过程交付给指挥类。

由指挥类负责将各个组件依照特定的规则组建为产品,然后将组建好的产品交付给client。

第二组  状态图VS策略图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDE3NjAxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="350" height="300" > 
                  

状态图策略图

艾玛~这一模一样的啊~~有多少和我一样,第一次都没发现。。但是既然一模一样,为什么又把一个模式说两遍呢?要是说不同点,从这张图中恐怕是难有答案了。

我们来从其它角度详细分析一下。

让我们来看看它们之间很多其它的相似之处:

  1. 加入新的状态或策略都非常easy,并且不须要改动使用它们的Context对象。

  2. 在状态模式和策略模式中,Context对象对改动是关闭的。加入新的状态或策略,都不须要改动Context。
  3. 正如状态模式中的Context会有初始状态一样,策略模式相同有默认策略。
  4. 状态模式以不同的状态封装不同的行为。而策略模式以不同的策略封装不同的行为。

  5. 它们都依赖子类去实现相关行为。

以下来看看详细的不同

    1. 状态模式封装了对象的状态,而策略模式封装算法或策略。由于状态是跟对象密切相关的,它不能被重用;而通过从Context中分离出策略或算法,我们能够重用它们。

    2. 在状态模式中。每一个状态通过持有Context的引用,来实现状态转移;可是每一个策略都不持有Context的引用。它们仅仅是被Context使用。
    3. 状态模式中非常好的定义了状态转移的次序;而策略模式并无此须要:Client能够自由的选择不论什么策略。

第三组 代理模式VS装饰模式

 
         

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDE3NjAxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="300" height="300" >

代理模式 装饰模式

仅看类图,感觉两者并非十分相似。

可是细心的同学也会发现两者语法形式上差点儿全然一样。

让我们来看看它们之间很多其它的相似之处:

    1. 对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个接口。对代理模式来说,代理类(proxy class)和真实处理的类(realclass)都实现同一个接口。

    2. 不论我们使用哪一个模式,都能够非常easy地在真实对象的方法前面或者后面加上自己定义的方法。

以下来看看详细的不同

    1. 差别最本质上是装饰模式应该为所装饰的对象增强功能;代理模式对代理的对象施加控制。并不提供对象本身的增强功能。

    2. 还有一个差别在于代理模式,对于被代理的类是固化在代理类中的,而对于装饰器模式,被装饰的类是调用时实例化的,也就是说被装饰的类是能够在调用时动态选择的。

总结

此外。桥接模式和适配器模式等等也是有可比性的。第一次学完设计模式,我知道。每个设计模式并非独立的。遵循6大原则和实际须要变化和封装的情况,我们灵活的来选择并应用它。

《大话设计模式》的学习告一段落。也就意味着设计模式要開始真正的走进我们的生活了。

整个过程我的收获非常多。包含对类图的理解。各个关系以及由类图到代码的转变。还有在不断的理解变化。设计模式,让我相信学习来源于生活。多结合生活,就能更好的理解所学。至于不足就是,设计模式的理解还不够到位,也有待在实践中去多应用,多体会。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-12 22:49:21

【设计模式】文章摘要 查找联系人控件的相关文章

初步探讨WPF的ListView控件(涉及模板、查找子控件)

本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmlns:c="clr-namespace:System.Collections;assembly=mscorlib" 然后代码如下:   <c:ArrayList x:Key="stuList">            <local:Student Id=

自定义快速查找字母控件

效果图如下: 首先看看布局文件,自定义的控件中包含一个 ListView,用于显示具体的数据内容: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     a

查找子控件和父控件方法

一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : FrameworkElement        {            DependencyObject child = null;            List<T> childList = new List<T>(); for (int i

WPF查找子控件和父控件方法[转帖]

WPF查找子控件和父控件方法 一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : FrameworkElement { DependencyObject child = null; List<T> childList = new List<T>(); for (int i = 0; i <= V

android是怎么根据id查找到控件的

============问题描述============ 求助.... 我有两个xml布局文件,a,b,    两个布局文件中的控件是一样的,id也是一样的.这样eclipse生成的R文件中id也是自由一个的,那么是android怎么根据这个id去查找到指定的控件,而不是查找到另一个???? ============解决方案1============ 引用 3 楼 u013818990 的回复: Quote: 引用 2 楼 kifile 的回复: 首先,你在调用 findViewById 之前,

Win2D 官方文章系列翻译 - 调整控件分辨率

本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-choosing-control-resolution/ 本文旨在讲解如何配置 Win2D XAML 控件使用的分辨率.下文将介绍如何: 使 Win2D 控件运行在固定的分辨率. 通过调整控件 DPI 减少渲染像素数以增强性能. 分辨率与控件缩放 本文中所用的“分辨率”一词,是指位图的尺寸(高宽). Win2D XAML 控件绘制的对象均有分辨率和 DPI 这两项属性.对象的 DPI 指示了绘制时其构成像素

Robotium查找指定控件

一.通过ID查找控件 1 Activity act=solo.getCurrentActivity(): 2 3 int id=act.getResources().getIdentifier("id名称","id", act.getPackageName());//id名称通过界面查看器hierarchyviewer.bat查看 4 5 View view=solo.getView(id); 二.相同ID控件区分 1)通过其他子控件先获取到父控件再获取子控件. 如

QHBoxLayout 、QFormLayout 遍历子部件,查找QLineEdit控件

布局如下: QLineEdit * edit1 = new QLineEdit; QLineEdit * edit2 = new QLineEdit; QLineEdit * edit3 = new QLineEdit; QLineEdit * edit4 = new QLineEdit; QFormLayout * formLayout1 = new QFormLayout; QFormLayout * formLayout2 = new QFormLayout; formLayout1->a

窗体内查找webbrowser控件的句柄

'-Api Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias "Call