![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式学习
文章平均质量分 83
设计模式学习与总结
西城风雨楼
if you don't use it ,you will lose it.
展开
-
五、原型模式
对象的拷贝又可以分为浅拷贝和深拷贝两种,所谓的浅拷贝指的是对引用类型,只是对引用本身进行了克隆,克隆的对象和以前的对象的引用指向同一块内存空间,如果该引用指向的是可变的对象,那么在某些场景下,新对象通过该引用对对象的修改,旧对象也可见,反之亦然。原型模式指的是,以某个对象为原型,产生一份调用该对象的某个接口方法,可以先对该对象的克隆拷贝,在Java中可以使用两种机制实现原型模式,一种是序列化机制,一种是来自Object类的clone方法。可以这么理解原型模式就是指的对象的拷贝。原创 2022-11-02 20:42:41 · 265 阅读 · 0 评论 -
四、抽象工厂模式
产品族指的是位于不同产品等级的且具有内在联系的多个产品构成的集合,比如手机产品和充电器产品,这是两个独立的产品,手机产品位于手机等级结构,充电器产品位于充电器等级结构中,那么手机产品和充电器产品就位于两个不同的产品等级结构中,因此二者构成一个产品簇。产品等级指的是产品的继承结构,比如手机产品,一般会有一个抽象的手机父类,然后再有具体的手机产品,比如华为手机,小米手机,苹果手机等,那么手机产品之间就形成了一个继承等级结构,所有的具体手机都继承自抽象手机类,就说手机产品构成一个产品等级。原创 2022-11-02 20:40:01 · 150 阅读 · 0 评论 -
三、工厂方法模式
无需改动现有的工厂类的代码,因此工厂方法模式很好的解决了简单工厂模式中,因此产品类扩展,而导致的工厂类代码的修改问题,很好的遵守了开闭原则。工厂方法模式将工厂类进行了抽象,在简单工厂模式中,只有一个简单工厂类,该简单工厂类并没有向上形成任何抽象,而工厂方法模式通过对工厂本身提供一个抽象层,并在该抽象层中定义了一个抽象的产品创建方法,子类工厂通过实现该方法完成具体产品的创建,该抽象方法也就是工厂方法。原创 2022-11-02 20:38:38 · 197 阅读 · 0 评论 -
二、简单工厂模式
简单工厂模式最大的问题就是扩展性问题,如果产品类别比较少,或者类别数目变化不大,那么使用简单工厂模式可以很好的对程序解耦,但是一但需要增加或者减少大量的产品类的时候,必须要修改简单工厂的代码,这不符合程序的开闭原则,同时简单工厂的职责过重,一个工厂类负责多个产品的创建,也违背了单一职责原则。简单工厂模式,故名思义就是简单,在产品类不是很多的时候,使用简单工厂可以很好的将产品类的创建和客户端代码解耦合,只要客户端和简单工厂创建产品的接口约定不变,那么产品类的创建细节可以随意改变。原创 2022-11-02 20:36:43 · 117 阅读 · 0 评论 -
一、设计模式七大设计原则
设计模式的七大设计原则是设计模式的基石,基本上23种设计模式的指导思想就是这七大设计原则。可以这么认为如果将设计模式比喻为盖房子的最佳实践,那么设计模式的七大原则就是指导盖房子过程中,应该怎么设计,应该怎么选材料等。单一职责原则里氏替换原则接口隔离原则开闭原则迪米特法则(最少知道原则)依赖倒置原则组合优先于继承原则关联关系。原创 2022-11-02 20:34:54 · 187 阅读 · 0 评论 -
六、单例模式
这里要先说明一下,instance在多个线程之间不存在内存可见性问题,因为有锁的存在,线程在执行临界区代码的时候,会将对共享变量的修改直接写回内存,因此instance不会存在内存可见性问题,这里导致问题的是new Singleton()可能会发生重排序,没错,就是因为这个重排序导致某个线程可能访问到未初始化完全的对象,从而可能导致错误。将单例对象定义成一个枚举类,枚举类的成员天然就是单例的,并且还不可以被序列化,因此可以防止因为序列化产生多个对象,这也是Effective Java里面推荐的方式。原创 2022-11-02 20:27:23 · 194 阅读 · 0 评论