设计模式

1.设计模式源自建筑学和人类学,模式结合起来可以解决更复杂的问题。

   一个模式的描述应该包括4项:模式的名称,模式的目的(即要解决的问题),模式的实现方法,约束因素。

  

2.设计模式和面向对象是相得益彰的关系。

   学习设计模式我们可以:复用解决方案;确立通用术语;提升了观察视角;

   设计模式可以帮助团队提高效率,使软件更容易修改和维护,

 

3.设计常被认为是一种将事物放在一起的组合过程,按照这种观点,整体由部分组成,先有部分,然后才有整体的形式。

    在形成整体前构建的模块,不可能有能力处理特殊的需要。

    每一部分都根据自己在整体中的位置而改变,只有通过这样的过程,一个建筑才能富有生气。才能有健壮灵活的系统。

    每个部分都因其存在于更大整体的背景中,而被赋予了特定的形式。

    这是一个复杂化的过程,通过对整体操作将部分注入其中,而不是一小部分一小部分添加而成。整体孕育了部分,整体的形式及各个部分是同时产生的,好像胚胎的成长过程。

   一种设计思想方式:开始用最简单的术语来考虑问题,然后添加更多特性。设计应该从问题的一个简陈述开始,然后通过在这个陈述中加入信息,使它更加详细复杂,这种信息应该采用模式的形式。

    找出为其它模式创造了背景的模式,这些模式应作为设计的起点。

 

4.用模式思考

    用在问题域中发现的模式进行思考,有助于获得突破性的思路,为思考指引了方向。

    用模式思考的过程:

(1)找出模式

(2)按背景的创造顺序将模式排序

(1)对每个模式扩展设计

(1)添加细节

背景模式是一个经常与其它模式相关的模式,它为其它模式提供背景。背景模式或者称为最高模式,最外层模式。

一般地工厂模式等创建型模式排 在末位。因为在知道需要实例化什么对象之前,不考虑对象实例化更好。明天的事情明天说,至少对于实例化是如此。先考虑系统中需要什么,然后再去关注如何创建它们。

Bridge模式常和Adapter模式结合使用,前者使用后者,为后者创造了背景。

Facade模式与Adapter模式有很多相似处。

Bridge模式就常成为背景模式的候选了。

使用模式的另外一个优点是可以看到重用和灵活性的可能,这是仅仅陷于细节的时候根本无法看到的。

模式为我们提供了一种语言,使我们能够超越于细节之上,以实际的方式讨论背景,这样我们更可能看到问题域中的约束因素。模式有助于我们吸取其他开发人员此前了解到的经验教训。因此,它有助于创建健壮,可维护而且有生气的系统。

开始认为存在一个其实并不需要的模式,未必会有什么副作用。

 

 

 

 

 

 

 

三.<<设计模式解析第2版>>

1.模式应该相互配合,共同解决问题。

 

3.软件开发中的3个不同视角(perspective):概念视角,规约视角,实现视角

   概念视角分析对象必须有哪些操作;

   规约视角标识了用来处理概念视角中所有情况所需的接口,即如何调用这些操作;

   实现视角关注对于给定的规约,怎样实现这个特定情况;

   在概念层次,抽象类就是其它类的占位符

 

 

五. 类图

     泛化记号:实心三角前头,指向父类。使用vp时,从父类拖向子类。

 

 

 

1.一种是过度设计,过度分析就是分析瘫痪,过度设计的表现之一:深入研究所有的可能的方案

   另一种是一上来就扎进细节,编写代码,不考虑长期问题,这种是放任自流.

2.针对接口编程,而不是针对实现编程。

   优先使用对象聚合,而不是类继承,更要避免巨型继承。意图是能够在互相独立的类中包含变化,从而充许未来发生变化,而不影响原有的代码。

   找出变化的概念并封装

3.分支太多,每次增加新的分支时,必须搜遍每个分支,找出可能涉及的地方,这就是分支蔓延。

4.重用并不是使用面向对象方法的原因,降低维护成本和使代码更加灵活才是更重要的考虑因素。

5.特化技术常常会产生太深的继承层次。这会导致程序弱内聚,冗余,紧耦合,难以测试。

6.原则总是适用的,而模式只在某些场景下才适用,虽然可能模式并不完美。

7.修改代码改进结构,但并不增加新功能,这就是重构(refactoring)。

8.switch语句可能意味着应该使用抽象。

9.对象的创建和管理规则:对象应该要么构造或管理其它对象,要么使用对象,而不应该兼而有之。

10.工厂应该既关心使用哪些对象的规则,又需关心如何管理它们的规则,可能包括实例化多少对象,如何共享对象。

11.按概念性动机分类:行为型模式,结构型模式,创建型模式。

 

 

12.三层架构与MVC:

三层架构:UI、BLL(业务处理)、DAL(数据处理)和永久存储(数据库) 
MVC:Model View Controller 模型-视图-控制器 
它们都是从整体上策划一个项目的实现逻辑,

区别:    三层架构中没有Control层,而是由界面直接调用业务逻辑
               三层架构的UI层相当于MVC中的View层

               三层架构的BLL+DAL相当于MVC中的Model层, MVC中的Model层由访问数据和业务逻辑组成。而三层中典型的Model是由实体类构成的。

MVC基本原则:应用程序逻辑(主流程)写在Control里面,View做数据展示,数据模型和业务逻辑代码写在Model里面。

MVC中的 Model层也可以再细分为实体类+业务逻辑类,业务逻辑类中必然紧耦合了实体类,为了保持高内聚,这个业务逻辑类只能包含有关这一个实体类的操作。

如果把多个有关实体的业务逻辑代码写到一个类的静态方法中,则彻底做到了"低内聚紧耦合",且把程序设计结构化了。

 

13.静态方法

静态方法的问题:一直占用内存,不能扩展,可维护性差。

静态方法不能被重写,会影响一部分设计思路,设计出的程序比较结构化。
静态方法不能读取对象中的非静态属性。

静态方法破坏了面向对象的多态性。

静态的方法和变量会调用时在内存生成一个唯一的标识,在物理内存中给静态一个位子,这样在调用时可以直接找到,,而且会节省内存。但是如果声明的静态过多,每一个都会在内存有一个位子,可能会报内存溢出。它们只存在于整个应用程序生命周期内。
当在多线程环境中是,静态方法还涉及到并发问题。

处理业务逻辑的代码不要写到静态方法中。被频繁调用的且和业务逻辑无关的独立功能性代码,如数学方法,推荐鼓励归类封装到静态方法中,以方便业务逻辑来调用。但是如果如果操作数据是对象,这些方法写作为对象成员方法则更合理些。

单例即是静态变量,根据程序设计的需要,单例不可过多,一个就好。其余全局数据作为成员变量放在其中,这样既没浪费内存又增强了可维护性。

从面向对象的角度上来说,应该根据该方法是否与此类实例化对象之间具有逻辑上的相关性,如果是就应该使用实例化对象,反之使用类静态方法。
从线程安全、性能、兼容性上也是选用实例化方法为宜。 

14.数据结构+静态方法处理。

     设计出只包含数据成员的类,然后用类静态方法处理它,这是传统的面向过程设计,这里的数据类只相当于c语言中的数据结构,而类静态方法就是一个个独立的全局函数。

     如果有考虑数据对象重用的理由,则一个包含了行为的对象的重用性会更方便一些。

15.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值