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();
}
}
}
}
}