JavaSE_设计模式_装饰模式

DecorateDesignModelDemo

package uncommitted;
/*装饰模式,又称包装模式~  
后面在Connection的关闭方法close会用到!
不将连接释放,而是放加连接池DataSource!

	在实际开发,发现对象的方法满足不了开发需求时,有三种方式对其进行增强
 * 1.写一个connecton子类,覆盖close方法,增强close方法
 * 2.用包装设计模式(也称装饰模式)
 * 3.用动态代理    aop 面向切面编程
     
		装饰模式的5步曲:标准步骤:
 * 1,写个类,实现共同的接口
 * 2,该类中定义一个成员,接收被装饰的对象
 * 3,该类中定义一个带参数构造函数,传入的参数即为被装饰的对象
 * 4,增强该增强的方法
 * 5,不要增强的方法使用原来被装饰的对象完成*/
class Person{
	public void eat(){
		System.out.println("吃饭");
	}
}
class RichPerson{
	private Person p;
	RichPerson(Person p){
		System.out.println("RichPerson构造函数中:饭前开胃酒");
		this.p=p;
		System.out.println("RichPerson构造函数中:饭后小甜点");
	}
	public void eat(){
		p.eat();
	}
}
class SubPerson extends Person{
	public void eat(){
		System.out.println("饭前开胃酒");
		//调用父类的方法
		super.eat();
		System.out.println("饭后小甜点");
	}
}
public class DecorateDesignModelDemo {
	public static void main(String[] args) {
		// 装饰设计模式比继承要灵活精简,同时装饰类和被装饰类要属于同一个父类和接口
		Person p=new Person();
		p.eat();
		System.out.println("====下面是使用了装饰设计模式的吃饭====");
		RichPerson rp=new RichPerson(p);
		rp.eat();
		
		System.out.println("====下面是使用了继承方式的吃饭====");
		SubPerson sp=new SubPerson();
		sp.eat();
	}
}


FakeIe_Tomcat

package uncommitted;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class FakeIe_Tomcat {
	public static void main(String[] args) throws Exception {
		//用Socket伪造1个浏览器(请求)与服务器(Tomcat)交互,并且取得服务器返回信息
		Socket s=new Socket("127.0.0.1",8080);//tomcat默认是8080端口
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		out.println("GET /myweb/1.html HTTP/1.1");//请求行
		out.println("Accept: */*");
		out.println("Accept-Language: zh-cn");
		out.println("Accept-Encoding: gzip,deflate");
		out.println("Host: 127.0.0.1:8080");
		out.println("Connection: close");
		out.println("");//必须空行
		out.println("");//请求体
		//读取tomcat服务器返回啥信息
		InputStream in=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,0,len));
		s.close();
	}
}
//下面是tomcat服务器 返回的信息
/*HTTP/1.1 404 Not Found
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 991
Date: Wed, 30 Oct 2013 08:59:21 GMT
Connection: close

<html><head><title>Apache Tomcat/6.0.29 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 404 - /myweb/1.html</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>/myweb/1.html</u></p><p><b>description</b> <u>Th
*/
IE_ServerSocket
package uncommitted;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class IE_ServerSocket {
	public static void main(String[] args) throws Exception {
		ServerSocket ss=new ServerSocket(9090);
		Socket s=ss.accept();
		InputStream in=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,0,len));
		//给客户端即IE浏览器,一个反馈信息
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
//		out.println("欢迎光临");
		out.println("<font color='red' size='7'>欢迎光临</font>");
		s.close();
		ss.close();
	}	
}
//这个是浏览器告诉服务器,IE能支持什么内容!
//GET / HTTP/1.1
/*Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, *
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: 127.0.0.1:9090
Connection: Keep-Alive*/
IE_ServerSocket

package uncommitted;
import java.net.InetAddress;
import java.net.UnknownHostException;

import org.junit.Test;
public class InetAddressDemo {
	/*方法说明:
	 *public class InetAddress extends Object
			implements Serializable
			此类表示互联网协议 (IP) 地址。 
			IP 地址是 IP 使用的 32 位或 128 位无符号数字,
			它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。
	 */
	@Test
	public void method_3() throws UnknownHostException {
		/*方法说明:有的主机对应的IP地址不唯一!
		  *static InetAddress[] getAllByName(String host) 
          在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
		  */
		InetAddress[] ips=InetAddress.getAllByName("www.baidu.com");
		for (InetAddress ip : ips) {
			System.out.println(ip);
		}
		/*www.baidu.com/61.135.169.105
		www.baidu.com/61.135.169.125*/
	}
	@Test
	public void method_2() throws UnknownHostException {
		/*方法说明:获取其他主机的IP地址*/
		InetAddress ip=InetAddress.getByName("www.baidu.com");
		System.out.println(ip);
		//www.baidu.com/61.135.169.105
		ip=InetAddress.getByName("Pre_eminent");
		System.out.println(ip);
		//Pre_eminent/169.254.230.5
		ip=InetAddress.getByName("169.254.230.5");
		System.out.println(ip); 
		/*hosts文件路径是
		C:\WINDOWS\system32\drivers\etc*/
	}
	@Test
	public void method_1() throws UnknownHostException {
		/*方法说明:获取本地主机的IP地址
		  * String getHostAddress() 
          返回 IP 地址字符串(以文本表现形式)。
 			String getHostName() 
          获取此 IP 地址的主机名。
		  */
		InetAddress ip=InetAddress.getLocalHost();
		System.out.println("获取本地主机IP地址对象:"+ip);
//		Pre_eminent/169.254.230.5(固定的)
//		拿到的其实是Autoconfiguration IP Address
//		表示DHCP分配的地址,并不是当前本机的公网IP地址
		System.out.println(ip.getHostName());//Pre_eminent
		System.out.println(ip.getHostAddress());//169.254.230.5
	}

}
/*
类InetAddress中的方法:
public static InetAddress getLocalHost()
                                throws UnknownHostException
返回本地主机。 
如果有安全管理器,则使用本地主机名和 -1 作为参数
来调用其 checkConnect 方法,以查看是否允许该操作。
如果不允许该操作,则返回表示回送地址的 InetAddress。 
返回: 
本地主机的 IP 地址。 
抛出: 
UnknownHostException - 如果找不到 host 的任何 IP 地址。 
另请参见: 
SecurityManager.checkConnect(java.lang.String, int)
*/
/*
 public static InetAddress getByName(String host)
                             throws UnknownHostException
在给定主机名的情况下确定主机的 IP 地址。 
主机名可以是机器名(如 "java.sun.com"),
也可以是其 IP 地址的文本表示形式。如果提供字面值 IP 地址,
则仅检查地址格式的有效性。 
对于以字面值 IPv6 地址指定的 host,在 RFC 2732 中定义的形式
或在 RFC 2373 中定义的字面值 IPv6 地址格式都可以接受。
IPv6 范围地址也受支持。有关 IPv6 范围地址的描述,请参见这里。 
如果主机为 null,则返回表示回送接口地址的 InetAddress。
请参阅 RFC 3330 的第 2 节和 RFC 2373 的第 2.5.3 节。 
参数: 
host - 指定的主机,或 null。 
返回: 
给定主机名的 IP 地址。 
抛出: 
UnknownHostException - 如果找不到 host 的 IP 地址,
或者 scope_id 是为全局 IPv6 地址指定的。 
SecurityException - 如果安全管理器存在
并且其 checkConnect 方法不允许进行该操作
 */
/*
public static InetAddress[] getAllByName(String host)
                                  throws UnknownHostException
在给定主机名的情况下,根据系统上配置的名称服务
返回其 IP 地址所组成的数组。 
主机名可以是机器名(如 "java.sun.com"),
也可以是其 IP 地址的文本表示形式。
如果提供字面值 IP 地址,则仅检查地址格式的有效性。 
对于以字面值 IPv6 地址 指定的 host,在 RFC 2732 中定义的形式
或在 RFC 2373 中定义的字面值 IPv6 地址格式都可以接受。
字面值 IPv6 地址还可以通过追加范围时区标识符或 scope_id 来限定。
scope_id 的语法和用法在这里描述。 
如果主机为 null,则返回表示回送接口地址的 InetAddress。
请参阅 RFC 3330 的第 2 节和 RFC 2373 的第 2.5.3 节。 
如果有安全管理器,并且 host 非 null,host.length() 不等于零,
则使用主机名和 -1 作为参数调用安全管理器的 checkConnect 方法,来查看是否允许该操作。 
参数: 
host - 主机名,或 null。 
返回: 
给定主机名的所有 IP 地址所组成的数组。 
抛出: 
UnknownHostException - 如果找不到 host 的 IP 地址,或者 scope_id 是为全局 IPv6 地址指定的。 
SecurityException - 如果安全管理器存在并且其 checkConnect 方法不允许进行该操作。 
另请参见: 
SecurityManager.checkConnect(java.lang.String, int)
 */





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值