设计模式一 创建型模式

尚学堂视频

创建型模式:

——单例,工厂,抽象工厂,建造者,原型

结构型模式:

——适配器、桥接、装饰、组合、外观、享元、代理

行为型模式:

——模版、命令、迭代器、观察者、中介、备忘录、解释器、状态、策略、责任链、访问者

单例:保证只有一个实例,提供一个全局访问该实例的全局访问点。

懒汉式:静态私有属性,静态公共方法获取,私有构造函数;

饿汉式:静态私有属性的赋值放在了获取方法里,要进行同步关键字:synchronizied修饰

双重检测锁实现,由于编译器优化原因和jvm底层模型原因,偶尔会出现问题。不建议使用。

静态内部类实现方式,线程安全,调用效率高,延迟加载等优点(利用类加载器的机制)

public class SingletonDemo {

	private static class SingletonClassInstance {
		private static SingletonDemo instance = new SingletonDemo();
	}

	private SingletonDemo() {
	}

	private static SingletonDemo getInstance() {
		return SingletonClassInstance.instance;
	}

}

枚举实现单例模式(可避免反射、反序列化等问题,无懒加载)

public enum SingletonDemo {

	instance;
	public void method() {
		System.out.println("xxxxx");
	}
}


使用myeclipse的uml插件画出类图,或rational rose、metamill等

常见的5种单例模式在多线程环境下的效率测试

饿汉式 22ms

懒汉式 636ms

静态内部类 28ms

枚举式 32ms

双重检查锁式 65ms

以上为相对值,在不同环境下不同的程序测试结果是不一样的

CountDownLatch

-同步辅助类,在完成一组正在其他线程中执行的操作之前,它运行一个或多个线程一直等等

countDown()当前线程调用此方法,则计数减一(建议放在finally里执行)

await(),调用次方法会一直阻塞当前线程,直到计时器的值为0

工厂:

简单工厂的重点是在选择,而非创建对象

建造者:如建造一个复杂的产品,有许多步骤需要处理。

建造模式的本质:

——分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构建出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

——由于实现了构建和装配的解耦。不同的构建器,相同的装配,也科技做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就实现了构建算法、装配算法的解耦,实现了更好的复用。

http://www.runoob.com/design-pattern/builder-pattern.html

使用场景:1、需要生成的对象具有复杂的内部结构。2、需要生成的对象内部属性本身相互依赖。

注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

原型模式:prototype

克隆:提高创建对象的效率,实现 cloneable接口,默认只是浅克隆(即类的普通属性,基本数据类型会被复制,引用类型不会被复制;克隆不走构造方法

利用序列化和反序列化实现深克隆:序列化接口Serializable

Test t1 = new Test();
	ByteArrayOutputStream bos  = new ByteArrayOutputStream();
	ObjectOutputStream oos = new ObjectOutputStream(bos);
	oos.writeObject(t1);
	byte[] bytes = bos.toByteArray();
	
	ByteArrayInputStream bis =new ByteArrayInputStream(bytes);
	ObjectInputStream ois = new ObjectInputStream(bis);
	Test t2 = (Test)ois.readObject();//t2就是克隆后的对象

原型模式很少单独出现,一般是和工厂方法模式一起出现,spring中bean的创建实际就是两种:单例模式和原型模式。

实际使用中,单例模式,简单工厂模式使用多(工厂模式,会增加过多类不便于管理,抽象工厂模式增加产品族,对新增加产品无力)

原型模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值