设计模式:把软件行业中出现的问题进行抽取并解决。总共有23种。对问题行之有效的解决方式,其实它是一种思想。
单例设计模式:
解决的问题:可以保证一个类在内存中的对象唯一性。
比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证对象唯一性呢?
1.不允许其他程序用new创建该类对象。
2.在该类中创建一个本类实例。
3.对外提供方法,让其他程序可以获取该对象。
步骤:
1.构造函数私有化
2.通过new在本类中创建本类的对象。
3.定义一个共有的方法将创建的对象返回。
饿汉式
class Single{// 类一加载对象就建立。
private static Single s = new Single();
private Single(){}
public static Single getInstance(){//使用方法可控。
return s;
}
}
懒汉式
class Single_2{//类加载没有对象,只有调用了getInstance方法时才会创建对象。
//单例设计模式的延迟加载形式。
private static Single_2 s = null;
private Single_2(){}
public static Single_2 getInstance(){
if(s == null)
s = new Single_2();
return s;
}
}
public class SingleDemo {
public static void main(String[] args) {
Single ss = Single.getInstance();
Single ss1 = Single.getInstance();
System.out.println(ss==ss1);
//Single ss = Single.s;
}
}
------------------------------------------------------------
装饰设计模式:对一组对象的功能进行增强时,就可以使用该模式进行问题的解决。
可以通过一个简单的小例子来理解装饰设计模式。
例:
public class Demo9 {
public static void main(String[] args) {
Person p = new Person();
//p.chifan();
NewPerson p1 = new NewPerson(p);
p1.chifan();
}
}
class Person{
void chifan(){
System.out.println("吃饭");
}
}
//这个类的出现是为了增强Person而出现。
class NewPerson{
private Person p;
NewPerson(Person p){
this.p = p;
}
void chifan(){
System.out.println("开胃酒");
p.chifan();
System.out.println("甜点");
}
}
装饰设计模式和继承都可以实现功能的扩展增强。
装饰设计模式和继承的区别。
为了提高效率而产生子类对象,只为了提高功能而进行继承,会导致继承体系越来越臃肿不够灵活。
而将技术进行单独的封装,那个对象需要这个功能,那个对象就和这个功能关联。
装饰比继承更为灵活。
特点:装饰类和被装饰类都必须所属于同一个接口或者父类。