创建型模式简单来说就是用来创建对象的。一共有五种:单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。
创建型模式指的是,这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是直接使用新的运算符实例化对象,从而使程序在判断针对某个给定实例需要创建哪些对象时更加灵活.
1.单例模式
定义:确保某一个类只有一个实例,并自行实例化向整个系统提供这个实例。
简介:单例模式理解起来不难,典型例子有一个公司只能有一个CEO。它主要是为了保证一个类仅有一个实例,这个类中自己提供一个返回实例的方法,方法中先判断系统是否已经有这个单例,如果有则返回,如果没有则创建。如果创建多个实例会消耗过多的资源或者某种类型的对象只应该有且只有一个时,应该考虑使用单例模式。
实现:单例模式理解起来不难,重要的是需要掌握它的几种常见写法。
饿汉式:
懒汉式:
上面的第一种懒汉式写法做到了延迟创建和线程安全,缺点是每次调用getInstance()时都必须进行同步,效率不佳。第二种DCL方式比较常见,两次判空,第一次判空避免了不必要的同步,第二次保证了单例创建,这种方式比较不错,但是在高并发环境下有时会出现问题。第三种方法最被推荐,线程安全也保证了实例唯一。
2.工厂方法模式
定义:一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂方法模式分为三种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可 。
3.抽象工厂模式
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能, 直接增加新的工厂类就可以了,不需要修改之前的代码。
4.建造者模式(Builder )
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的 Test 结合起来得到的。
5.原型模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
简介:原型模式不难理解,它主要是用在实例创建的时候,因为有的时候我们通过new创建一个对象时可能成本过高,这时我们可以考虑直接通过直接克隆实例快速创建对象。克隆后的实例与原实例内部属性一致。原型模式需要注意一个深拷贝和浅拷贝的问题。
总结:虽然设计模式能够给我们带来各种好处,但是我们也不应该滥用设计模式,设计模式在一定程序上会增加系统的复杂性。我们在写码时应该评估好各方面,避免过度设计。我们可以根据实际需要,适当的进行改动。
网友评论