设计模式相关 java

创建类设计模式:

1 单例模式(饿汉式,懒汉式,双检索),下面是一种懒汉实现方式。

public class Singleton {

    // 需要加上volatile关键字来保证线程安全 对于双重检测的时候
    private static volatile Singleton singleton = null;

    private Singleton() {
        System.out.println("init class");
    }

    // 第一种方法: 利用synchronize关键字来实现线程安全
    public synchronized static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }

        return singleton;
    }

    // 第二种方法: 双重检测 来确保线程安全 同时将同步块放在方法内减少每次都需要同步加锁带来的消耗
    public static Singleton getInstance1() {
        if (singleton == null) {

            synchronized (singleton) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }

        return singleton;
    }
}

第一种方法,使用synchronized关键字来进行线程同步,每次调用都会加锁,而且,单例模式,返回实例的概率要远大于创建实例。所以每次调用方法都执行同步会造成一种资源的浪费。
第二种方法,将同步代码块放在内部,确保了实例为null时才会进行创建实例和同步的过程 ,避免了每次都需要同步带来的消耗。

2 工厂模式。Factory模式最主要的优势在于当创建对象时可提高封装水平。

3 prototype模式。

原型模式属于对象的创建模式。通过给出一个原型对象(通常是抽象类,或者是接口,内部维护clone()方法 )来指明所有创建的对象的类型。通过原型实例创建新的对象,就不需要关心这个实例本身的类型,只需要实现克隆自身的方法,也而无需再去通过new来创建。
在这里插入图片描述

结构型设计模式:

1 observer模式。(应用场景,各种Listener。java原生观察者类:java.util.observable, 普通类extends observable成为被观察者,implement observer成为观察者)
  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
在这里插入图片描述
●  抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。

●  具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做具体被观察者(Concrete Observable)角色。

●  抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。

●  具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。如果需要,具体观察者角色可以保持一个指向具体主题对象的引用。
 
2 装饰者模式。
对个体对象功能的扩展,可以看作是继承的一种替代。典型的应用是java IO类。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filepath)));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

它是作用于对象层次还是类层次?
针对对象层次,动态的给一个对象添加功能扩展。装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

3 责任链模式。
模式的定义:一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。典型的应用 switch 判断语句:

switch (request) {
case 0: System.out.println("SMBother handle it: " + request);
	    break;
case 1: System.out.println("Aige handle it: " + request);  
		break;
case 2: System.out.println("7Bother handle it: " + request);
		break;
default:
break;

4 适配器模式。适配器模式将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。
适配器模式的三个特点:
1 适配器对象实现原有接口
2 适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象)
3 对适配器原有接口方法的调用被委托给新接口的实例的特定方法

public class SocketAdapter  
		implements DBSocketInterface{   //实现旧接口
 
	//组合新接口
	private GBSocketInterface gbSocket;
	
	/**
	 * 在创建适配器对象时,必须传入一个新街口的实现类
	 * @param gbSocket
	 */
	public SocketAdapter(GBSocketInterface gbSocket) {
		this.gbSocket = gbSocket;
	}
 
	
	/**
	 * 将对就接口的调用适配到新接口
	 */
	@Override
	public void powerWithTwoRound() {
		
		gbSocket.powerWithThreeFlat();
	}
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值