设计模式
李国菁LGJ
一名小菜鸟,需要大神提携
展开
-
装饰者模式 && 门面设计模式 && 工厂方法模式
一、装饰者模式定义:在不改变原有对象的基础上,将功能附加到对象上public class DecoratorTest { public static void main(String[] args) { // 就拿一个拍照更能举例说明,他可以有美颜 和 滤镜功能,但是不能影响之前的拍照功能 // 设计模式遵循开闭原则 和 职责单一原则 //先拍照然后 美颜 最后滤镜 这三个功能互不牵扯 Component concreate = n原创 2020-12-05 10:57:47 · 163 阅读 · 0 评论 -
Bridge模式
public static void main(String[] args) { /* * 用GG追MM来举例子 * 礼物分为:温柔型和狂野型 * WarmGift(温柔型的礼物) 和 WildGift(狂野型的礼物) * WarmFlower WildFlower * WarmBook WildBook * 如果再有别的抽象类。ColdGift(冷酷型的礼物) * 就会产生爆炸.原创 2020-10-01 11:08:18 · 142 阅读 · 0 评论 -
Builder模式
builder 模式分离复杂对象的构建和表示同样的构建过程可以创建不同的表示一个类构建的话,需要传递50个参数,这个时候就可以使用 Person person = new Person.PersonBuilder() .basicInfo(1, "liguojing", 29) .score(100) .weight(150) .location("袁旗寨",原创 2020-09-26 15:55:46 · 90 阅读 · 0 评论 -
代理在Android中的应用,一行代码实现网络框架的切换
代理的定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。开闭原则:代码的功能是开放的,对于已经写好的代码要做到关闭下面介绍的这个案例是访问网络的代理实现HttpProxy类是访问网络的代理,具体的被代理对象是VolleyModel 和 OkHttpModel切换网络框架只要在MyAppcation中修改一行代码就ok,实现了编码的开闭原则 public void onCreate() { super.onCreate(); context = ge原创 2020-09-13 09:18:45 · 420 阅读 · 0 评论 -
策略模式
测试类public class MainTest { public static void main(String[] args) { Dog[] arr = {new Dog(50), new Dog(30), new Dog(40), new Dog(20)}; // 这个是排序工具类 SortLgj<Dog> dogSortLgj = new SortLgj<>(); // 这个是具体的排序策略原创 2020-09-12 11:23:32 · 82 阅读 · 0 评论 -
正确的单例模式
为什么要加Volatile关键字:防止指令重排序,原因是 new Singleton时,一般来说有三个步骤:1.分配一块内存2.在内存上初始化Singleton 对象3.把这块内存的地址返回赋值给 instance,但是经过编译器优化后2 和 3的顺序有可能颠倒,也就是说可能拿到的 instance 可能还没有初始化,访问instance时导致发生空指针异常,而 volatile 可以阻止这种事情的发生。public class ThreadPoolUtils { public stat原创 2020-09-12 09:24:37 · 140 阅读 · 0 评论