美文网首页设计模式
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类图

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