随笔分类 -  设计模式

23中设计模式案例积累
摘要:创建性模式singleton模式解决的是实体对象个数的问题。除了singleton之外,其他创建性模式都是new耦合所带来的耦合关系。Factoyr Method,Abstrct Factory, Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。如果遇到“易变类”,期初的涉及通常从Factory Method开始,当遇到更多的复杂的变化时,在考虑重构其他三种工厂模式(Abstract Factory,Builder,Prototype)。Prototype模式:Singleton模式:Builder模式:Fa 阅读全文
posted @ 2012-02-10 23:16 指尖流淌 阅读(729) 评论(0) 推荐(1) 编辑
摘要:设计模式要遵循的几条原则:1.单一职责原则--每个类型最好只提供一种变化的条件,也就是只做一件事。2.开闭原则--开放更新,关闭修改。3.替换原则--就是 is a 的关系,也就是在程序运行时所有的子类都可以替换为基类4.依赖倒置原则--高层模块不应该依赖于低层模块,两者都要依赖于抽象,而抽象不应该依赖于细节,而细结就该依赖于抽象。5.接口隔离原则--不应该强迫用户依赖于它们不用的方法 阅读全文
posted @ 2011-11-16 09:38 指尖流淌 阅读(241) 评论(0) 推荐(0) 编辑
摘要:简单工厂模式(Simple Factory Pattern)意图: 《1》专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 《2》(simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常他根据自变量的不同返回不同类的实例。 《3》简单工厂模式实质是由一个工厂类根据传入的参量,动态的决定应该创建出那一个产品类的实例。 《4》简单工厂模式实际上不属于23中GOF模式,但他作为工厂方法模式(Factory Method)的一个引导。简单工厂模式角色的分类: 《1》工厂角色:是简单工厂模式的核心,他负责. 阅读全文
posted @ 2011-11-16 09:32 指尖流淌 阅读(301) 评论(0) 推荐(0) 编辑
摘要:c#允许一个类继承其他类的属性和方法,别继承的类称为父类,继承的类称为派生类或子类。子类不仅仅可以继承基类的属性和方法,还可以根据需要定义新的属性和方法,增加新的功能,这样可是用户重用基类的代码,专注于子类的新代码,提高类的可重用性,继承的好处是能共享代码,继承后,父类的所有的字段和方法都将存在于子类中,每一个子类都具有父类的非私有特性。c#语言中子类仅能派生于一个父类。1.继承的定义如果要声明一个类派生于另一个类,可以使用下面的语法[修饰符] class 派生类名:基类名{ //派生类的成员}其中: 修饰符:可选用poublic internal absrtract sealed new . 阅读全文
posted @ 2011-11-16 09:29 指尖流淌 阅读(331) 评论(0) 推荐(0) 编辑
摘要:接口包含方法、属性、事件、索引等一系列声明,可以让类来实现指定的接口,这个类来实现指定的接口,这个类必须为接口中指定的生命来定义代码。结构也可以实现接口,实现方法与类相同。接口的定义修饰符 interface 接口名{ 接口体}接口的说明如下:修饰符:控制接口的存取限制符,与类相同。对接口比较适合的存取限制符是public.接口名:所声明接口的名称。习惯上,接口用大写的I开始,跟在I后面的字符也是大写的,例IDrivable.接口体:用于定义接口的成员。接口的成员可以是方法,属性,索引,和事件,不包含字段。所有的成员都不包含访问修饰符,所有的成员都隐式的声明为public,原因是接口只是一组声 阅读全文
posted @ 2011-11-16 09:28 指尖流淌 阅读(258) 评论(0) 推荐(0) 编辑
摘要:c#多态性的定义:同一操作作用于不同的类的实例,不同的类将进行不同的理解,最后产生不同的执行结果。c#支持两种类型的多态性:《1》编译时的的多态性。编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数,返回的类型等信息决定实现何种操作。《2》运行时的多态性。运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作,c#中,运行时的多态性通过虚成员实现。编译时的多态性为我们提供了运行速度的快的特点,而运行时的多态性则带来了高度灵活的特点。虚方法当类中的方法声明前加上virtual修饰符时,我们称之为虚方法,反之为非虚方法。class MyBaseClass 阅读全文
posted @ 2011-11-16 09:28 指尖流淌 阅读(236) 评论(0) 推荐(0) 编辑
摘要:在简单工厂模式中,一个工厂处于对产品类进行实例化的中心位置,他知道每一个产品类的细节,并决定何时哪一个产品类应当被实例化。简单工厂模式的优点是能够使客户端独立于产品的创建过程,并且在系统中引入新产品时无需对客户端进行修改,缺点是当有新产品加入到系统中的时,必须修改工厂类,以加入必要的处理逻辑。简单工厂模式的致命弱点就是处于核心地位的工程类,因为一旦他无法确定要对那个类进行实例化,就无法使用该模式,而工厂方法模式则可以很好的解决这个问题。 简单方法模式可分为: (1)Product:产品角色 在我们c#中一般使用抽象类和接口实现 定义产品的接口 (2)CreateProduct:真实的产品 实. 阅读全文
posted @ 2011-11-16 09:26 指尖流淌 阅读(583) 评论(0) 推荐(0) 编辑
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //设计模式之单件模式 /* 单件设计模式适用性:1、当类只能有一个实例而且客户可以弄一个众所周知的访问点访问它时 * 1、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时 * 应用场景: * 1、每台计算机可以有若干个打印机,但只能有一个Printer Spooler.避免两个打印作业同时输出到打印机。 * 2、pc机中可能有几个串口, 阅读全文
posted @ 2011-11-16 09:09 指尖流淌 阅读(186) 评论(0) 推荐(0) 编辑
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; ///在电脑组装机总有这样的经历,我们到了店里,先会有一个销售人员来询问你希望装的机器是怎么样的 ///的配置,他会给你一些建议,最终会形成一张装机单。和客户确定好装机配置以后,他会把这张单子交给 ///提货的人,由他来准备这些配件,准备完成后交给装机技术人员。技术人员会吧这些配件装成一个整机交给 ///客户 ///不管是什么电脑,它总是有CPU,内存、主板、硬盘以及显卡等部件构成的,并且装机的过程过程总是固定的: ///1 阅读全文
posted @ 2011-11-16 09:07 指尖流淌 阅读(239) 评论(0) 推荐(0) 编辑
摘要:意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。场景 游戏场景中的有很多相似的敌人,它们的技能都一样,但是随着敌人出现的位置不同,这些人的能力不太一样。假设,我们现在需要把三个步兵组成一队,其中还有一个精英步兵,能力特别高。那么,你或许可以创建一个敌人抽象类,然后对于不同能力的步兵创建不同的子类。然后,使用工厂方法等设计模式让调用方依赖敌人抽象类。 问题来了,如果有无数种能力不同步兵,难道需要创建无数子类吗?还有,步兵模型的初始化工作是非常耗时的,创建这么多步兵对象可能还会浪费很多时间。我们是不是可以通过只创建一个步兵原型,然后复制出多个一摸一样的步兵呢?复制后,只需要调 阅读全文
posted @ 2011-11-16 09:04 指尖流淌 阅读(224) 评论(0) 推荐(0) 编辑
摘要:概述创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式。为什么需要创建型模式所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性。假定在一个游戏开发场景中,会用到一个现代 阅读全文
posted @ 2011-11-16 09:03 指尖流淌 阅读(237) 评论(0) 推荐(1) 编辑
摘要:概述:在软件系统中,由于应用环境的变化。常常需要将“一些现存的对象”放在新的环境中应用,但是新的环境中要求的接口是这些现存对象所不能满足的。那么如何应对这种“迁移的变化”?如何既能利用现有的对象的良好实现,同时有能满足新的应用环境所要求的接口?这就是本文要说的Adapter模式。生活中的例子:适配器模式允许将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。扳手提供了一个适配器的例子,一个空套在一个齿上,齿轮的每个边的尺寸是相同的。生活中的例子:6号板子能那解开6号的螺丝,8号的板子能解8号的螺丝。我们需要做的就是将用8号的板子来打开6号的螺丝。适配 阅读全文
posted @ 2011-11-16 09:02 指尖流淌 阅读(335) 评论(0) 推荐(0) 编辑
摘要:所有编程初学者都会有这样的问题、就是碰到问题就直觉的用计算机能理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考、比如计算器程序,现要求输入两个数和运算符号、然后根据运算符号判断选择运算、得到结果,这本是没有错,但这样的思维确实的我们的程序只能满足实现当前的需求,程序不容易维护,不容易服用。从而达不到高质量代码的要求。举例:中国古代的活字印刷技术没发明以前、当一个刻板完成以后、要需改动里面的一个字的时候、就需要全部重新刻、这样以前刻好的文字就全部白费、但活字印刷改变了这个方向:第一、要改里面的一个字就行、此为可维护;第二、这些字并非用完这次就无用,完全可以再后来的 阅读全文
posted @ 2011-11-16 09:01 指尖流淌 阅读(211) 评论(0) 推荐(0) 编辑
摘要:上一篇日志、我们应用到了设计模式三大特性的封装、今天这一片我们继续研究程序设计的另几种比较优秀的特性。在上面的程序中这款计算器只涉及了加、减、乘、除算法、现在我们要加一个平方根运算,我们的思路会是改动我们的计算类,在switch中加一个分支就行了,但是这样的话要让加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这岂不是大大的糟糕。这还不是最主要的,看这个例子,如果公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职人员(时新)的算法,但按照咱的思路写法,公司就必须把包含原三种算法的运算类给 阅读全文
posted @ 2011-11-16 08:59 指尖流淌 阅读(195) 评论(0) 推荐(0) 编辑
摘要:摘抄自《大话设计模式》一书报名参赛:“来、来、来,快来报名了,设计模式大赛,每个人都有机会,每个人都能成功,今天你参加比赛给自己一个机会,明天你就成功还社会一个辉煌。来来......”台子上方一很长的横幅,上写着“OOTV杯设计模式大赛海选”,下面一个帅小伙拿着话筒卖力的吆喝着。“大姐、二姐,我们也去参加报名参加吧。”工厂三姐妹中最小的简单工厂说道,“这种选秀比赛,多的去了,很多是骗子的,没意思”大姐抽象工厂说“我觉得我们三姐妹有机会的,毕竟我们从小就是学这个出身。”二姐工厂方法也很有兴趣参加。“大姐,去吧,去吧”简单工厂拉住抽象工厂的手左右摇摆着。“行了行了,我们去试试,成就成,不成可别乱哭 阅读全文
posted @ 2011-11-16 08:58 指尖流淌 阅读(437) 评论(0) 推荐(0) 编辑
摘要:在第二篇日志中我们完成了一个初级的入门模式:简单工厂模式。现在应客户需求咱来完成一个简单的商场收银软件,营业员根据客户所购买的产品的单价和数量,向客户收费。用两个文本框来输入单价和数量,一个确定按钮来算出每种商品的费用,用个列表框来记录商品的清单。为了适应市场的需求,有时候为了商场的盈利、吸引更多的顾客,商场会举行一系列的活动,诸如:满300返100、满700返200、满200送50等、这样的在此项目中变化的算法的变化、咱用简单工厂模式来封装此变化点。咱来分析这个项目:面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象。具有相同属性和功能的对象的抽象类的集合才是类。所以在 阅读全文
posted @ 2011-11-16 08:56 指尖流淌 阅读(188) 评论(0) 推荐(0) 编辑
摘要:声明:转自《大话设计模式》一书在第三篇日志中我们应用到简单工厂模式来应对商场中举行活动所带来的诸多变化,但是由于市场变化的频繁性,简单工厂模式已经不能满足市场的变化,这一篇咱介绍一种新的模式:策略模式。策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,不会影响到使用算法的客户在商场中收银时如何促销,永达这还是返利,其实都是一些算法,用工厂来生成算法对象,这个没有错,但算法本身只是一种策略,最重要的是这些算法随时随地都有可能变化互相替换的,这就是变化点,我们封装变好点使我们面向对象的一种很重要的思维方式。我们看策略模式是怎样实现封装变好点的。第一步:抽象算法类第二步:分别实现算法 阅读全文
posted @ 2011-11-16 08:55 指尖流淌 阅读(201) 评论(0) 推荐(0) 编辑
摘要:这篇日志我们来介绍设计模式的一大原则:单一职责原则单一职责原则(SRP):就一个类而言,应该仅有一个引起他变化的原因现在来设计俄罗斯方块游戏、要是我们完成这个小游戏,我们的思路是什么?我们一般会这样考虑,首先他方块下落的原理是画四个小方块,擦掉,然后再在下一行画四个方块。不断的绘出和擦掉就形成了动画,所以应该要有画和擦方块的代码,然后左右键实现左移和右移,下键实现加速,上键实现旋转,这其实都应该是函数,当然左右移动需要考虑碰撞问题,下移需要考虑堆积和消层问题。步骤如下:1、先建立一个窗体、2、加上一个用于游戏框架的控件,比如Panel或者picturebox,一个按钮button来控制“开始” 阅读全文
posted @ 2011-11-16 08:52 指尖流淌 阅读(217) 评论(0) 推荐(0) 编辑
摘要:在软件系统中,有时候面临的产品是动态变化的,而且这个产品具有一定的等级结构,这是如果用工厂模式,则与产品等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适,那么如何封装这种动态的变化?从而使依赖与这些易变化的对象的客户程序不随着产品类的变化?这就是这篇日志所要描述的:原型模式原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型的创建新的对象举个例子:原型模式使用原型实例指定创建对象的种类,新产品的原型通常是现有全部产品建立的,这样的原型是被动的,并不参与复制他自己,一个细胞的有丝分裂,产生了两个同样的细胞,是一个扮演主动角色复制自己原型的例子,这演示了原型模式,一个细胞分裂, 阅读全文
posted @ 2011-11-16 08:50 指尖流淌 阅读(343) 评论(0) 推荐(0) 编辑
摘要:在我们生活中一些事物总有它它特有的属性、像论文、建立、求职信等、都有其固有的格式来书写,下面咱咱用简历来实现咱原型模式的实现。当咱书写一份简历时,必须要有姓名、可以设计性别、年龄、可以设置工作经历,最终咱们就可以利用这个固定的模式来书写简历。简历的初步代码实现如下: 这里面客户端用到两份简历、我们需要实例化两次,这样你会不会觉得在客户端很麻烦,假如我们需要二十份简历的话,那我们至少需要实例化29次了啊,这倒不是很严重的,假如我们要将98年改成99年,那我们就要改二十次了,好到此我们该是原型模式出场的时候了,因为所有的简历的格式是固定的,原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原 阅读全文
posted @ 2011-11-16 08:46 指尖流淌 阅读(200) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示