
快速忘记设计模式
无招胜有招
yxking1
这个作者很懒,什么都没留下…
展开
-
策略模式学习
应用场景:既然时策略,那就是当...情况下,就要...做。代码里最常见就是if....else if...,这种情况,就可以使用策略模式先来看最原始代码。如下面代码所示,大部分人的优化策略,就是把每个if里面的逻辑抽取出来。public class StrategyDemo { public void deal(int type){ if(type == 1 ){ //此处大概100多行代码 System.out.原创 2022-01-18 23:23:30 · 355 阅读 · 0 评论 -
命令模式学习
应用场景:不直接去执行方法,而且时通过其他类去操作。细品一下有一丝简单工厂设计模式的味道public class CommonDemo { public interface Animal{ public void play(); } static class Cat implements Animal{ @Override public void play() { System.out.prin..原创 2022-01-18 22:39:57 · 239 阅读 · 0 评论 -
代理的模式
大白话:自己不想做,想让别人帮忙做自己的事情,甚至做的更好静态代理代理者和被代理者都需要实现接口动态代理只有被代理对象实现接口1.既然需要他人帮忙,那就要找到代理对象2.其次就是要对方做事情,调用方法解决这两个问题,分别需要Proxy和InvocationHandlerpublic class MyProxy { interface IBuild{ void create(); } static clas...原创 2022-01-18 21:56:13 · 341 阅读 · 0 评论 -
观察者模式
大白话:如果想知道一个对象的变化状态,就可以安排一个观察者对它进行监控 实现观察者模式,需要两个关键类Observable:表示需要被观察的对象Observer:观察者,真正去监控的对象public class ObserverDemo { /** * 待观察的类 */ static class Product extends Observable { private Double price ; pub...原创 2022-01-18 21:54:19 · 1280 阅读 · 0 评论 -
中介者模式
比如A类中的方法调用了B和C类的方法,而B类的方法又调用了A类和C类方法,这种情况就可以考虑中介者模式public class MediumPattern { public static class ModeleA{ public void play(){ ModeleB modeleB = new ModeleB(); modeleB.deal("模块A"); ModeleC modeleC = n.原创 2022-01-18 00:12:50 · 247 阅读 · 0 评论 -
创建复杂对象-构造模式
使用场景:生成订单实体的时候,需要对价格,地址,商品等属性赋值改造前 public static void main(String[] args) { Order order = new Order() ; System.out.println("处理收获地址业务逻辑"); order.setAccount("张三"); System.out.println("根据优惠券计算订单价格"); }改造后1. .原创 2022-01-16 23:23:11 · 205 阅读 · 0 评论 -
提取通用代码-模板模式
项目中经常遇到重复的代码在多个地方使用,这个时候就可以使用此设计模式一般优化比如3个类里面的方法都有一段相同的代码 public class AAAImpl{ public void deal(){ System.out.println("公共方法"); System.out.println("AAA 的娱乐活动"); } } public class BBBImpl{ ..原创 2022-01-16 14:17:01 · 338 阅读 · 0 评论 -
适配器模式
装饰器模式(Decorator Pattern):允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们可以理解为是类与类之间的关系,对原有类的对象功能的增强。interface House { String getSize();}class NormalHouse implements House { @O原创 2020-06-18 21:33:54 · 167 阅读 · 0 评论 -
单例模式六(注册式单例)
概念:每个实例都缓存到统一容器管理,通过唯一标识获取对应的实例public class ContainerSingletion { private ContainerSingletion(){} private static HashMap<String, Object> ioc = new HashMap<String, Object>();...原创 2020-03-05 00:09:36 · 562 阅读 · 0 评论 -
单例模式5.1(序列化破坏单例)
概念:将每一个实例都缓存到统一的容器中,使用唯一标识获取实例。之前见过可以通过反射来破坏单例,和如何防止被破坏。今天讲一下序列化破坏单例。新建类 SerializableSingletion,其实就是饿汉式单例,只是实现了Serializable接口public class SerializableSingletion implements Serializable { ...原创 2020-03-04 23:40:46 · 143 阅读 · 0 评论 -
单例模式五(枚举式单例)
前面文章讲到的单例都可以通过反射破坏,这里就有枚举式单例来解决public enum EnumSinletion { SINGLETION ; public static EnumSinletion getSingletion(){ return SINGLETION; }}import java.lang.reflect.Const...原创 2020-03-02 23:58:01 · 185 阅读 · 0 评论 -
单例模式四(静态内部类单例)
这里有一种优雅的单例写法,采用内部类来创建实例,跟懒汉式一样,只有在调用的时候才进行创建实例public class LazyStaticInnerSingletion { private LazyStaticInnerSingletion(){ } public static LazyStaticInnerSingletion getInstance(){ ...原创 2020-03-02 23:30:22 · 151 阅读 · 0 评论 -
单例模式三(双重检查)
懒汉式的延迟加载可以解决线程安全和节省内存,但又会引起性能不足。 按照上一篇文章的代码,a,b多个线程执行情况下,如果a先进入了方法处于允许状态,那b线程则只能处于...原创 2020-03-02 14:42:27 · 226 阅读 · 0 评论 -
单例模式二(懒汉式)
上一篇文章讲到了饿汉式有占用资源而不使用的嫌疑,那我们就应该考虑到调用的时候在生成对象。 改后的第一版本public class LazySingletion { private LazySingletion(){ } private static LazySingletion single; protected static LazyS...原创 2020-03-02 14:16:23 · 127 阅读 · 0 评论 -
单例模式一(饿汉式)
概念 整个系统中确保一个类只有一个对象实例使用原因方便管理 资源的合理利用实现思路构造函数私有化 静态函数返回实例 确保对象实例有且只有一个public class HungrySingleton { private HungrySingleton(){ } private static HungrySingleton si...原创 2020-03-02 13:57:36 · 148 阅读 · 0 评论 -
工厂模式三(抽象工厂模式)
定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。 比如付款方式有阿里支付,微信支付,银联支付等,阿里支付的账单和商品清单都属于同一个产品(阿里支付),所以也可以成为同一个产品族,而阿里的账单和微信账单又可以成为产品等级。 首先可以先创建账单和清单的接口public interface IBill { void addBill...原创 2020-03-01 20:12:29 · 144 阅读 · 0 评论 -
工厂模式一(简单工厂模式)
简单工厂模式是指类的实例是由一个工厂对象来决定创建,工厂类里面写方法来实现对象的创建。例如小动物,饲养者只关心喂养,不关心动物如何出生的。新建接口IAnimal,提供一个动物通用的方法eat()public interface IAnimal { void eat();}分别创建Dog和Cat类 实现IAnimal接口public class Dog implem...原创 2020-02-29 22:04:06 · 199 阅读 · 0 评论 -
工厂模式二(工厂方法模式)
概念:对象由接口来创建,让实现接口的类来决定实例化哪个类,类的实例化推迟在子类中实现 例如猫和狗都属于动物一类,都具有吃饭这个功能。先定义创建具体动物对象的接口IAnimalpublic interface IAnimal { void eat();}分别创建实现接口IAnimal的两种动物 Cat类和Dog类public class Cat impleme...原创 2020-02-29 21:33:06 · 169 阅读 · 0 评论