大话设计模式Java版前三章总结

类和实例
类:具有相同的属性和功能的对象的抽象的集合
对象:对象就是类的实例
实例:是一个真实的对象,
实例化是创建对象的过程,使用new关键字来创建

构造方法
构造方法又叫构造函数,是对类进行初始化的。
构造方法与类同名,无返回值也没有void,在new的时候调用。
注:
(1)所有类都有构造函数,默认生成空的构造函数
(2)若自己定义了构造方法,默认的构造函数就会失效,若需要空的构造函数需要在写一遍。
(构造方法是重载)

方法重载
方法重载可在不改变原方法的基础上新增功能
注:方法重载时,方法名相同,但参数类型或个数必须要有所不同

抽象类 abstract
让抽象类拥有尽可能多的共同代码,拥有尽可能少的数据
(1)抽象类不能实例化
(2)抽象方法是必须被子类重写的方法
(3)如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否包含其他一般方法

一、代码规范
注释
1 文件头注释
文件头注释以 /开始,以/结束,需要注明该文件创建时间,文件名,命名空间信息。

/* 
* Created on 2005-7-2 
* / 

2 类、接口注释
类、接口的注释采用 /* … /,描述部分用来书写该类的作用或者相关信息,块标记部分必须注明作者和版本。

/**
* @author Java Development Group 
* @version 3.0 
*/ 

3 构造函数注释
构造函数注释采用 /* … /,描述部分注明构造函数的作用,不一定有块标记部分。

/** 
* 默认构造函数 
*/ 

/** 
* 带参数构造函数,初始化模式名,名称和数据源类型 
* @param schema 
* Ref 模式名 
* @param name 
* Ref 名称 
* @param type 
* byVal 数据源类型 
*/ 

.4 域注释
域注释可以出现在注释文档里面,也可以不出现在注释文档里面。用/* … /的域注释将会被认为是注释文档而出现在最终生成的HTML报告里面,而使用/* … */的注释会被忽略。

/** 
* The X-coordinate of the component. 
* @see #getLocation() 
*/ 
int x = 1263732; 

5 方法注释
方法注释采用 /* … /,描述部分注明方法的功能,块标记部分注明方法的参数,返回值,异常等信息。例如:

/** 
* 设置是否有外码约束 
* @param conn 
* Connection 与数据库的连接 
*/ 

6 定义注释
规则同域注释。

注释块标记
块标记将采用如下顺序:

… 
* 

* @param (classes, interfaces, methods and constructors only) 

* @return (methods only) 

* @exception (@throws is a synonym added in Javadoc 1.2) 

* @author (classes and interfaces only, required) 

* @version (classes and interfaces only, required. See footnote 1) 

* @see 

* @since 

* @serial (or @serialField or @serialData) 

* @deprecated (see How and When To Deprecate APIs) 

* … 

一个块标记可以根据需要重复出现多次,多次出现的标记按照如下顺序:

@author 按照时间先后顺序(chronological) 

@param 按照参数定义顺序(declaration) 

@throws 按照异常名字的字母顺序(alphabetically) 

@see 按照如下顺序: 

@see #field 

@see #Constructor(Type, Type...) 

@see #Constructor(Type id, Type id...) 

@see #method(Type, Type,...) 

@see #method(Type id, Type, id...) 

@see Class 

@see Class#field 

@see Class#Constructor(Type, Type...) 

@see Class#Constructor(Type id, Type id) 

@see Class#method(Type, Type,...) 

@see Class#method(Type id, Type id,...) 

@see package.Class 

@see package.Class#field 

@see package.Class#Constructor(Type, Type...) 

@see package.Class#Constructor(Type id, Type id) 

@see package.Class#method(Type, Type,...) 

@see package.Class#method(Type id, Type, id) 

例子:

/** 
* 这个类演示了文档注释 
* @author Ayan Amhed 
* @version 1.2 
*/ 
public class SquareNum {
    /** 
    * This method demonstrates square(). 
    * @param args Unused. 
    * @return Nothing. 
    * @exception IOException On input error. 
    * @see IOException 
    */ 
    public static void main(String args[]) throws IOException { 
    SquareNum ob = new SquareNum(); 
    double val; 
    System.out.println("Enter value to be squared: "); 
    val = ob.getNumber(); 
    val = ob.square(val); 
    System.out.println("Squared value is " + val); 
    } 
}

二、接口型模式介绍
1.接口:
接口可以从多个基接口继承,而类或结构可以实现多个接口
接口可以包含方法、属性、事件和所引器
接口本身不提供他所定义的成员的实现,接口只指定实现该接口的类或接口必须提供的成员

2.接口型模式包括哪些模式?
适配器模式,外观模式,合成模式以及桥接模式等

3.抽象类和接口的区别:
(1)首先,
在abstract class中,可以有自己的数据成员,也可以有非abstract的成员方法,
而在interface中,只能有静态的不可修改的数据成员(即 static final),所有的成员方法都是abstract的
从某种意义上说interface是一种特殊形式的 abstract class

(2)其次,
abstract class是一种继承关系,一个类只能使用一次继承关系(因为java不支持多继承)
但是,一个类可以实现多个interface

(3)本质:
Abstract class 表示的是 “is - a”
Interface 表示的是 “like - a”

(4)实现抽象类和接口的类必须实现其中所有的方法

(5)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值
抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值

(6)接口中的方法默认都是public abstract类型的

例子:
Door具有执行两个动作open和close,同时具有报警功能
要清楚AlermDoor本质是Door还是报警器

public abstract class Door {

    public abstract void open();
    public abstract void close();
}
public interface Alerm {

    void alerm();
}

AlermDoor 本质是Door 同时有报警的功能

/**
 * 本质是Door  同时具有alerm方法
 * @author chen
 *
 */
public class AlermDoor extends Door implements Alerm {

    public void open(){

    }
    public void close(){

    }
    public void alerm(){

    }
}

4.接口和委托的区别:
接口包含属性、方法、事件和索引
委托不包含事件

三、适配器模式
1.什么是适配器模式
就是把一个类的接口转换成客户端所期待的另一种接口,从而使原接口不匹配而无法在一起工作的两个类能在一起工作

适配器解决的问题:就是需要的东西就在前面,但却不能使用,短时间内又无法改造它,于是就想办法适配他。
适配器的意思就是使得一个东西适合另外一个东西的东西

2.适配器模式所涉及的角色有哪些?那这些要素主要都做些什么?
目标、客户、被适配者、适配器
目标(CTarget):定义一个客户端使用的特定接口
客户(CClient):使用目标接口,与和目标接口一致的对象合作。
被适配者(CAdaptee):一个现存需要匹配的接口
适配器(Adapter):负责将CAdaptee的借口转换成CTarget的接口

适配器是一个具体的类,是本模式的核心
由此可见,客户端调用Adapter接口的时候,Adapter便会调用Adaptee的操作相应请求,该模式就完成了接口的适配过程。

3.适配器的好处和缺陷
适配器模式可以将一个类的接口和另一个类的接口匹配起来
使用的前提是你不能或不想修改原来的适配器母的接口

4.什么时候适合使用适配器模式
在双方都不太容易修改的时候再使用适配器模式适配

5.适配器总体上可以分为哪两类?及他们的不同
类适配器和对象适配器
类适配器具有两个特点:
(1)适配器类(Adapter)实现客户类所需要的(Target)接口,
(2)适配器类(Adapter)通过继承来实现对Adaptee类的重用
对象适配器:包含一个适配器者的引用,对象适配器也实现了客户类需要的接口,

(a)继承实现Adaptee(被适配者)类重用的例子

Public class Adapter extends Adaptee implements Target{
     //重写target中request 方法
     Public void request (){
          this.specialRequest();   //调用Adaptee 中的specialRequest方法
     }
}

客户调用Target接口的request方法,实际就是调用其父类Adaptee的specialRequest方法

(b)通过组合关系实现继承的例子

Public class Adapter  implements Target{
     Adaptee adaptee = new Adaptee();  //实例化Adaptee

     Public void request (){
          adaptee .specialRequest();    //调用adaptee 中的specialRequest方法
     }
}

客户调用对象适配器的方法时,对象适配器调用他所包含的适配器者实例的适当方法

对于不同的适配器,客户代码完全一样:

Public class Client{
    Public static void main (String [] args0{
        Target t = new Adapter();
        T.request();
    }
}

6.生活中的适配器
老式PS2转USB的适配器 二孔转三孔的拖地插排 电脑电源适配器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值