Java之23种设计模式

说明:

本人目前没有涉及到很深入的设计模式的应用,所以在这里简单陈述一下自己接触过的模式。忘小伙伴们海涵。如果有很好的借鉴,可以多多可我留言,我进行补充,大家一起进步,谢谢。

设计模式是代码可用性的延伸。

设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。

①创建型模式;

②结构型模式;

③行为型模式;

※标识:为常用设计模式,8种。

设计模式分类
创建型模式结构型模式行为型模式J2EE模式
工厂模式适配器模式责任链模式

MVC 模式

抽象工厂模式桥接模式命令模式

业务代表模式

单例模式过滤器模式 解释器模式

组合实体模式

建造者模式组合模式 迭代器模式

数据访问对象模式

原型模式装饰器模式中介者模式

前端控制器模式

 外观模式备忘录模式

拦截过滤器模式

 享元模式 观察者模式

服务定位器模式

 代理模式状态模式传输对象模式
  空对象模式 
  策略模式 
  模板模式 
  访问者模式 

设计模式六大原则:

①开闭原则:对扩展开放,对修改关闭;

②里氏代换原则:是面向对象的基本原则之一。是对开闭原则的补充。实现开闭原则的关键是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

③依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体;是开闭原则的基础。

④接口隔离原则:使用多个隔离的接口比使用单个的接口要好。降低类之间的耦合度。

⑤迪米特法则:一个实体应该尽量少的于其他实体之间发生相互作用,使得系统功能模块相对独立。

⑥合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。

常用设计模式:

单例模式:

特点:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

①饿汉式[立即加载]

//饿汉式单例
public class Singleton1 {
	//私有构造
	private Singleton1() {}
	
	private static Singleton1 single = new Singleton1();
	//静态工厂方法
	public static Singleton1 getInstance() {
		return single;
	}
}

②懒汉式[延迟加载]

//懒汉式单例[延迟加载方式,多线程不安全]
public class Singleton2 {
	
	//私有构造
	private Singleton2() {}
	
	private static Singleton2 single = null;
	
	public static Singleton2 getInstance() {
		if (single == null) {
			single = new Singleton2();
		}
		return single;
	}
}

//懒汉式单例[延迟加载方式,多线程安全,但效率低]
public class Singleton3 {
	
	private Singleton3() {}
	
	private static Singleton3 single = null;
	
	public static Singleton3 getInstance() {
		//等同于 synchronized public static Singleton3 getInstance()
		synchronized (Singleton3.class) {
			//注意:里面的判断是一定要加的,否则出现线程安全问题
			if (single == null) {
				single = new Singleton3();
			}
			return single;
		}
	}

}

//懒汉式单例[延迟加载方式,多线程安全,效率高]
public class Singleton4 {
	
	private Singleton4() {}
	
	private static Singleton4 single = null;
	// 双重检查
	public static Singleton4 getInstance() {
		if (single == null) {
			synchronized (Singleton4.class) {
				if (single == null) {
					single = new Singleton4();
				}
			}
		}
		return single;
	}

}

//静态内部类
public class Singleton5 {
	
	private Singleton5() {}
	
	//静态内部类
	private static class innerObject {
		private static Singleton5 single = new Singleton5();
	}
	
	public static Singleton5 getInstance() {
		return innerObject.single;
	}
}

//static静态代码块实现
public class Singleton6 {
	
	private Singleton6() {}
	
	private static Singleton6 single = null;
	
	static{
		single = new Singleton6();
	}
	//静态代码块
	public static Singleton6 getInstance() {
		return single;
	}
}

单例优势:

1)      减少创建Java实例所带来的系统开销

2)      便于系统跟踪单个Java实例的生命周期、实例状态等。

工厂模式:

 

策略模式:

 

 

引用:

http://www.cnblogs.com/garryfu/p/7976546.html

https://www.cnblogs.com/yuanye0918/p/5961087.html

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣渣梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值