美文网首页设计模式
2021-01-30 工厂模式&&UML类图

2021-01-30 工厂模式&&UML类图

作者: 胖渣大橘子 | 来源:发表于2021-01-30 12:18 被阅读0次

UML类图1
UML类图2
UML类图3

1开放封闭原则

  • 对修改关闭,对扩展开放。
  • 香港回归一国两制。
  • 😄对痛苦关闭,对快乐开放。

2简单工厂和工厂的对比

  • 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。就像计算器,让客户端不用管该用哪个类的实例,只有把“+”给工厂,工厂就自动给出了相应的实例,客户端只要去做运算就可以。不用的实例会实现不同的运算。
    但是问题也就在这里,如果要加一个“求M数的N次方”的功能,我们是一定要给运算工厂类的方法里加“case”的分支条件的,修改原有的类?这可不是什么好方法,这就等于说,我们不但对扩展开放了,对修改也开放了。违背了开放-封闭原则。
    于是工厂方法就来了。
    工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使以子类的实例化延迟到其子类

3工厂模式图

工厂.png
工厂原型图.png

4学雷锋简单工厂

class LeiFeng {
   public void Sweep() {
       System.out.println("扫地");
   }
   public void Wash() {
       System.out.println("洗衣");
   }
   public void CarryRice() {
       System.out.println("扛大米");
   }
   public void SayHello() {
       
   }
}
class Volunteer extends LeiFeng {
   public void SayHello() {
       System.out.println("志愿者学雷锋");   
   }
}
class Undergraduate extends LeiFeng {
   public void SayHello() {
       System.out.println("大学生学雷锋");   
   }
}
// 简单雷锋工厂
class SimpleFactory {
   public static LeiFeng CreateLeiFeng(String type) {
       LeiFeng result = null;
       switch (type) {
           case "学雷锋的大学生":
               result = new Undergraduate();
               break;
           case "社区志愿者":
               result = new Volunteer();
               break;
       }
       return result;
   }
}
public class LeiFengEgg {
   public static void main(String[] args) {
       LeiFeng person = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
       person.SayHello();
       person.Wash();
       LeiFeng personB = SimpleFactory.CreateLeiFeng("社区志愿者");
       personB.SayHello();
       personB.CarryRice();
   }
}

5学雷锋工厂

interface IFactory {
    LeiFeng CreateLeiFeng();
}
class LeiFeng {
    public void Sweep() {
        System.out.println("扫地");
    }
    public void Wash() {
        System.out.println("洗衣服");
    }
    public void CarrayRice() {
        System.out.println("扛大米");
    } 
    public void SayHello() {
    } 
}
class Undergraduate extends LeiFeng {
    public void SayHello() {
        System.out.println("我是大学生,我来学雷锋");
    } 
}
class Volunteer extends LeiFeng {
    public void SayHello() {
        System.out.println("我是志愿者,我来学雷锋");
    } 
}
class UndergraduateFactory implements IFactory {
    public LeiFeng CreateLeiFeng() {
        return new Undergraduate();
    }
}
class VolunteerFactory implements IFactory {
    public LeiFeng CreateLeiFeng() {
        return new Volunteer();
    }
}
public class LeiFengF {
    public static void main(String[] args) {
        IFactory factory = new UndergraduateFactory();
        LeiFeng leifengA = factory.CreateLeiFeng();
        leifengA.SayHello();
        leifengA.CarrayRice();
        IFactory factoryB = new VolunteerFactory();
        LeiFeng leifengB = factoryB.CreateLeiFeng();
        leifengB.SayHello();
        leifengB.Wash();
    }
}

相关文章

  • 2021-01-30 工厂模式&&UML类图

    UML类图1[https://blog.csdn.net/blues1021/article/details/45...

  • 工厂模式

    工厂模式 1. 介绍和举例 2. uml类图 3. demo代码 4. 经典应用场景 介绍和举例 uml类图 de...

  • 09.代理模式和装饰模式的区别

    代理模式和装饰模式 代理模式UML代理模式类图 装饰模式UML装饰模式类图从类图来看,二者除了名称不同,几乎没有差...

  • 工厂模式 - 演示与场景

    UML类图: 代码模拟: 实例:React.createElement 工厂模式设计原则: 构造函数和创建者分离 ...

  • 《Android源码设计模式解析与实战》-工厂方法模式

    UML类图 模式定义 工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神...

  • 简单工厂模式&UML类图

    重读《大话设计模式》,回忆曾经学习过的设计模式,并记录一点所得和感悟。 代码无错就是优? 编程是一门技术,牛掰的会...

  • 设计模式-简单工厂模式

    定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。 UML类图...

  • 设计模式总结大纲

    设计模式范例 设计模式 基本的UML类图的关系 设计模式之(命令模式) 基本概念 角色划分 UML类图 应用场景 ...

  • 设计模式补完计划

    目录 1.uml类图2.uml时序图3.设计模式 uml类图 泛化关系(继承):指类继承自类,接口继承自接口的关系...

  • 简单工厂模式、工厂模式

    简单工厂模式类图 工厂方法模式类图 比较 简单工厂模式包含生成类实例的判断逻辑,工厂方法模式把判断...

网友评论

    本文标题:2021-01-30 工厂模式&&UML类图

    本文链接:https://www.haomeiwen.com/subject/suwhtltx.html