黑马程序员--基础加强--第三篇--单例设计模式,装饰者模式认识,专家模式,享元模式,模版方法设计模式

ASP.Net+Android+IOS开发.Net培训期待与您交流!

单例设计模式  

        在我们生活中,常常在我们生活中经常碰到这样的问题,比如银行跟多个ATM机的关系,客户在ATM机A存钱,然后在ATM机B取钱,ATM机B必须知道客户所存钱的数目才能让客户取钱,这是这两个ATM机都有客户在银行的对象,要想相互通信,保持数据唯一性,客户这个对象必须有且仅有一个。还有多个程序操作统一配置文件等例子,这就用到单例设计模式。
        单例设计模式算是一种解决这一类问题的通用方法,或者说是一种思想。那么怎么才能保证只有一个对象呢?首先,银行的对象不能让其他程序new出,这样的话只能让银行new出一个对象,其次,银行必须提供给ATM机公有的获取对象的接口。
public class ATM {
	java.util.Scanner input = new java.util.Scanner(System.in);
	Bank bank = Bank.getInstance();
}
public class Bank {
	private Card[] cards = new Card[100];
	
	//单例模式
	private Bank(){}
	
	public static Bank bank = new Bank();//饿汉式
	
	public static Bank getInstance(){
		return bank;
	}
	
	public Card[] getAllAcount(){
		return cards;
	}
       //单例模式
/* private Bank(){}private static Bank bank;public static Bank getInstance(){
		synchronized(Single.class){
			if(bank == null){//懒汉式
				bank = new Bank();
			}
		}	
		return bank;
	}
*/
}

装饰者模式 

        举一个例子,比如有很多只小鸟一同起飞,A,B,C,D,E,F,G,怎样让小鸟A飞的更快一些呢???飞的快不快是不是跟翅膀有关系呢?想让小鸟A飞的更快,可以给小鸟A加上一双机械翅膀,这样不就更快啦?这里,机械翅膀就是装饰小鸟A用的,没有机械翅膀小鸟也能飞,加上翅膀,只不过飞的更快一些,这里,在JAVA中机械翅膀就是装饰者模式的实例!   在JAVA中用到装饰者模式的就是缓冲区,BufferedReader和BufferedWriter。
       装饰者模式和继承的区别是:
1装饰者模式为所有能装饰的类提供统一接口,BufferedReader能对FileReader,LineNumberReader都可以,继承者是只对单个类来说的。
2如果以后类扩展了,因为是继承同一接口,装饰者模式还能用,但继承就得重新写子类,不利于扩展。
3装饰者模式和所有被装饰的类同属一个类,使得类之间的关系不想继承那么繁琐,臃肿。
public class CopyTest2{
	public static void main(String[] args){
		FileReader fr = null;
		FileWriter fw = null;
		BufferedReader br = null;
		BufferedWriter bw = null;
		String str = null;
		try{
			fr = new FileReader("D:/Test.txt");
			br = new BufferedReader(fr);
			fw = new FileWriter("E:/Test.txt");
			bw = new BufferedWriter(fw);
			while((str = br.readLine()) !=null){
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
		}catch(IOException e){
			e.printStackTrace();
			throw new RuntimeException("文件找不到异常");
		}finally{
			if(br != null){
				try{
					br.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
			if(bw != null){
				try{
					bw.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		}
	}
}

    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值