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