
设计模式
猫老壳
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
策略模式
策略模式 案例:我们需要创建一个duck抽象类代表鸭子类,抽象类中含有一个抽象方法,如fly()/swim()/eat()等方法。然后我们有几种类型的鸭子:北京鸭、玩具鸭、野鸭子,分别继承Duck类并实现几种方法。 存在的问题:每种鸭子都有自己的特色,有的鸭子不能飞翔,有的不能游泳…而继承父类就是继承所有方法。此时可以使用策略模式实现。 假设所有鸭子都能游泳,而有的不能飞翔,eat吃的食物也不同。 我们可以将游泳方法写在抽象类中,因为所有鸭子都有的功能。而飞翔和eat可以使用两个接口,每个接口可以有不同的实原创 2020-08-03 09:43:50 · 193 阅读 · 0 评论 -
责任链模式
责任链模式 案例:学校设备采购审批流程如下: 0<=x<=5000由办公室主任审批 5000<=x<=10000由院长审批 10000<x<=30000由副校长审批 30000<x由校长审批 编写程序完成审批项目。 在没有设计模式时,可以写if、else来判断金额,从而调用对应的审批者。 if、else写法存在的问题? 如果审批金额发生改变,则if、else中的代码也要改变。 责任链模式简介 责任链模式,又叫职责链模式,为请求创建了一个接受者对象的链,这原创 2020-08-03 09:43:09 · 220 阅读 · 0 评论 -
装饰器模式
装饰器模式 场景:煎饼的点餐系统中,有各种口味的煎饼,然后选择完煎饼口味后,可以选择加肠加蛋或者加其他的配料。如何设计点餐系统。 如果煎饼的成员变量中包含所有的配料,显然系统比较复杂,新增配料时需要修改煎饼的代码,不符合开闭原则。 使用装饰器设计模式后:只需要在煎饼对象上加上鸡蛋装饰,加上香肠的装饰即可。新增配料时,新增加一个装饰类即可。 装饰器中的几个角色: 抽象构件:它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法。即煎饼抽象类。 具体构件:抽象构件的子类。即煎饼抽象类的实现类。 抽原创 2020-08-03 09:42:30 · 243 阅读 · 0 评论 -
适配器模式
适配器模式 Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。 **Adapter(适配器类):**适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。 **Adaptee(适配者类):**适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下原创 2020-08-03 09:41:41 · 228 阅读 · 0 评论 -
原型模式
原型模式 使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。主要是实现Cloneable接口重写clone方法。 浅克隆:只复制这个对象,对象的属性不会进行克隆。即改变原型对象的属性,克隆出的对象的相应属性也可能改变。 深克隆:重写clone方法中,手动将对象属性也克隆一份。深克隆可以采用序列化和反序列化: public Object deepClone() throws IOException, ClassNotFoundException { //创建流对象 try原创 2020-08-03 09:40:46 · 164 阅读 · 0 评论 -
建造者模式
建造者模式 当一个类的构造函数的参数比较多时,且有的参数必须传入,有的参数可选时,通过构造函数创建对象比较繁琐,可以使用建造者模式创建对象。 在类中创建一个静态内部类Builder,提供方法返回创建好的对象。 public class Computer { private final String cpu;//必须 private final String ram;//必须 private final int usbCount;//可选 private final Strin原创 2020-08-03 09:39:49 · 127 阅读 · 0 评论 -
工厂模式
简单工厂模式(静态工厂模式) 就是有一个工厂类中有一些方法可以返回对象。创建对象的时候不自己new,而是通过工厂方法得到一个对象。 优点:使用时可以不去关心对象是怎么创建的,解耦; 创建一个水果工厂类,提供一个创建水果对象的方法,通过传入一个参数说明需要什么对象。 public class FruitFactory { public Fruit createFruit(String type) { if (type.equals("apple")) {//生产苹果原创 2020-08-03 09:39:04 · 137 阅读 · 0 评论 -
单例模式
单例模式。 单例模式确保一个类只有一个实例,并提供全局的访问点,通过一个私有构造函数、私有静态变量和一个公有静态函数实现。 单例模式分为懒汉式和饿汉式实现。 **懒汉式:线程不安全。**延迟加载,若多个线程同时进入到if(uniqueInstance==null),则会导致多次实例化。 饿汉式:线程安全。直接实例化,则不会多次实例化。 如何使懒汉式线程安全? 方法一:对 getInstance加锁:性能太差 方法二:双重校验。先判断是否实例化,若没有实例化则加锁后再判断是否实例化进行实例化,注意对类变量加v原创 2020-08-03 09:37:57 · 147 阅读 · 0 评论