黑马程序员_设计模式

来源:互联网 发布:攻击阿里云服务器方法 编辑:程序博客网 时间:2024/04/29 15:17

装饰设计模式

当想对已有的对象进行功能增强时。
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能
那么自定义的该类称为修饰类
装饰模式比继承模式灵活,避免了继承体系臃肿
而且装饰类还降低了类与类之间的关系
装饰类因为是增强已有对象,具备的功能和已有的功能是相同的
所以装饰类和被装饰类通常都是属于同一个体系中。

装饰类通常会使用构造方法接受被装饰对象
并基于被装饰对象的功能,提供更强大的功能

class Person//原类,需要增强类
{
    public void fun1() {}
}

class SuperPerson//将原类作为构造参数传入的增强类,该类一般会添加更多功能
{
    private Person person;
    SuperPerson(Person person)
    {
           this.person = person;
    }
    public void fun2()
    {
            p.fun1();
            System.out.println();//比如添加个打印。。
    }//添加新功能
   
}

class PersonDemo
{
    public static void main(String [] args)
    {
        Person p =  new Person();//原类
        SuperPerson s = new SuperPerson(p);//当作参数传入构造成增强类操作
        s.fun2(){}//调用fun()2时,也会有p.fun1()的功能调用
           
    }
}

单例模式
//饿汉式


class Single{
private final static Single s = new Single();
Single(){}
public static Single getInstacne(){
return s;
}
}
//懒汉式 
class Single2{
private static Single2 single = null;
private Single2(){}
public static Single2 getInstance(){
if(single == null){
synchronized(Single2.class){
if(single == null){
single = new Single2();
}
}
}
return single;
}
}


public class DanLiSynchronized {


}
享元模式

在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。

比如word中的字母符号,每个符号都是一个对象,不同出现的地方就是不同的坐标定位。

以共享的对象,也就是说返回的同一类型的对象其实是同一实例,当客户端要求生成一个对象时,工厂会检测是否存在此对象的实例,如果存在那么直接返回此对象实例,如果不存在就创建一个并保存起来,这点有些单例模式的意思。通常工厂类会有一个集合类型的成员变量来用以保存对象,如hashtable,vector等。在java中,数据库连接池,线程池等即是用享元模式的应用。——tzj163



0 0
原创粉丝点击