策略模式
策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
介绍意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用 ...
找不到工作..呜呜..
<{=....(嘎嘎嘎~)
星期天
9点起床
建造者模式(Builder)
建造者模式(Builder)特点:在需要生成复杂内部结构时使用,即将多个简单的对象一步一步构建称为一个复杂对象。构建方式(1)
新建Person.java类
public class Person { public int age; public String name; public String sex; public String address; public String born; @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ...
抽象工厂方法模式
LandAnimal.java
public interface LandAnimal { public void run();}
WaterAnimal .java
public interface WaterAnimal { public void swim();}
Cat .java
public class Cat implements LandAnimal { @Override public void run() { Log.i("msg","cat is runing"); }}
Dog .java
public class Dog implements LandAnimal { @Override public void run() { Log.i("msg","dog is runing"); } ...
工厂方法模式
PersonAction.java
public interface PersonAction { public void eat();}
WomanEat.java
public class WomanEat implements PersonAction { @Override public void eat() { Log.i("msg","woman is eating"); }}
ManEat.java
public class ManEat implements PersonAction { @Override public void eat() { Log.i("msg","man is eating"); }}
Provider.java
public interface Provider { p ...
简单工厂模式
简单工厂模式特点:
提供一种创建对象的最佳方式,在创建对象时不提供对外暴露创建逻辑,并且通过一个共同的接口来指向新创建的对象
定义一个创建对象的接口,让子类来决定实例化哪一个具体的工厂类,延迟到子类去执行
主要解决选择接口的问题
扩展性高,只增加相应工厂类即可,知道名称即可创建对象,屏蔽具体的实现,调用者只关心接口
增加需求时,需要增加具体类与工厂实现,导致类个数成倍增加,增加系统复杂度
只有需要生成复杂类对象时才需要使用工厂模式,且简单工厂模式不属于23种设计模式
PersonAction.java
public interface PersonAction { public void eat();}
WomanFactory .java
public class WomanEat implements PersonAction { @Override public void eat() { Log.i("msg","woman is eating"); ...
vue使用markdown
前言:
项目开发需要用到富文本编辑器,最终确定使用vue框架 vue-meditor 。
1、vue-meditor简介一款使用marked和highlight.js开发的一款markdown编辑器,除常见markdown语法外,支持快捷输入、图片粘贴、代码复制、全屏编辑、预览等功能
1.1、优点:使用简单,安装npm包或者引入js包就行方便扩展,定制型比较强功能强大,总分3个版本,简单版、预览版、专业版体积小,加载速度快,npm包删除了highlight.js和codemirror里的依赖
1.2、实现思路:通过监听文本输入区域内内容的变化,实时将输入的markdown语法进行编译,并渲染到预览区域。编辑器大致分为头部菜单栏、左侧内容输入区域、右侧预览区域三个部分。头部菜单主要为定自定义标题区域和菜单按钮,菜单按钮可通过配置文件进行显示和隐藏;左侧编辑区域,简单版使用textarea开发,满足基本需求,专业版使用codemirror开发,编辑区域支持手动输入文本和通过头部菜单插入;右侧预览区域可实时预览输入文本,并可通过菜单按钮,进行编辑区域和预览区域的切换
1.3详细文档:gith ...
单例模式
JAVA单例模式6种写法
饿汉式单例//饿汉式单例类.在类初始化时实例化 public class Singleton { private Singleton() {} private static final Singleton single = new Singleton(); //静态工厂方法 public static Singleton getInstance() { return single; } }
懒汉式1public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new ...
2022/8/28
周日 睡到11点