小草王
这个作者很懒,什么都没留下…
展开
-
设计模式-7.门面模式(Facade)
门面模式门面模式(Facade):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。如:我想要修一个房,势必要去找到水泥工、搬砖工、砌砖工。但是我又不知道去哪里找。如图:修房对我来说就很麻烦,一件事却要new很多不同的对象如图:此时我找到包工头,我告诉他我要一个什么样的房子,其他的就由他来解决class Mi{ public v原创 2021-05-06 08:29:51 · 70 阅读 · 0 评论 -
设计模式-6.享元模式(Flyweight)
享元模式在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flywei原创 2021-05-06 07:23:34 · 78 阅读 · 0 评论 -
设计模式-5.原型模式(Prototype)
建造模式 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象原型模式主要用于对象的复制,它的核心是就是类图中的原型类Product。Product类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。重写Object类中的原创 2021-05-05 19:41:04 · 75 阅读 · 0 评论 -
设计模式-4.建造模式(Builder)
建造模式将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。public class A_Builder { public static void main(String[] args) { Product product = new Product.Builder().productName("火星零食").price(10).build(); System.out.println(product); }}原创 2021-04-18 21:30:47 · 63 阅读 · 0 评论 -
设计模式-3.抽象工厂 模式(Abstract Factory)
抽象工厂 模式1.由一些工厂方法组合而成的应用场景程序需要处理不同系列的相关产品,但是你不希望它依赖于这些产品的具体类时,可以使用抽象工厂优点:1.可以确信你从工厂得到的产品彼此是兼容的。2.可以避免具体产品和客户端代码之间的紧密耦合3.符合单一职责原则4.符合开闭原则定义一套接口规范/** * 初始化 */interface Init{ void init();}/** * 上传 */interface Put{ void put();}原创 2021-04-18 17:45:37 · 39 阅读 · 0 评论 -
设计模式-2.工厂方法模式(Factory Method)
工厂方法模式1.当你不知道改使用对象的确切类型的时候2.当你希望为库或框架提供扩展其内部组件的方法时主要优点:1.将具体产品和创建者解耦2.符合单一职责原则3.符合开闭原则/** * <p> * 工厂方法模式Demo * </p> * * @author: wxm * @Date: 2021/4/18 */public class A_FactoryMethodDemo { public static void main(Str原创 2021-04-18 15:18:13 · 44 阅读 · 0 评论 -
设计模式-1.单例模式(Sinleton)
1.懒汉模式:延迟加载,只有正在使用的时候,才开始实例化1.线程安全问题2.double check 加锁优化3.编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字进行修饰。对于volatile修饰的字段,可以防止指令重排。class A_Singleton{ /** * 如果不加 volatile * 那么在 instance = new A_Singleton(); * 可能 1.分配空间 2.引用原创 2021-04-18 14:24:10 · 108 阅读 · 0 评论