设计模式-简单工厂模式学习笔记

前言:学习书籍《大话设计模式》

简单工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。


  • 优缺点

优点:满足了可维护性

           简单工厂模式满足了程序的可维护性,如果直接new对象,那么new对象的代码会分布在程序的各个类的角落里,发生修改或者是需要重构的话,将会是一件很麻烦的事情,简单工厂模式将创建对象的操作抽取到一个工厂类中,               使用一个抽象类作为父类,根据不同的选择来返回不同的对象,使得代码更容易管理,可维护性更高。

缺点:违反了开放-封闭原则

           如果新增一种对象,那么简单工厂模式的工厂类中的判断代码中就会多一个分支,发生了修改,违反了设计模式的对修改封闭的原则。


  • 代码

类图

一个计算器的demo,拥有加减乘除四个对象,通过OperatorFactory类来根据不同算法选择来返回某一个对象

 

父类代码

public abstract class Super {
   public abstract Double count(Double num1,Double num2);
}

子类代码

public class Add extends Super{
    @Override
    public Double count(Double num1, Double num2) {
        return num1 + num2;
    }
}

  

public class Divide extends Super {
    @Override
    public Double count(Double num1, Double num2) {
        return num1 / num2;
    }
}

  

public class Multiply extends Super{
    @Override
    public Double count(Double num1, Double num2) {
        return num1 * num2;
    }
}

  

public class Subtract extends Super{
    @Override
    public Double count(Double num1, Double num2) {
        return num1 - num2;
    }
}

工厂核心代码

public class OperatorFactory {

    public Super operator(String operator){
        Super s = null;
        try{
            switch (operator){
                case "+":
                     s = new Add();
                     break;
                case "-":
                     s = new Subtract();
                     break;
                case "*":
                     s = new Multiply();
                     break;
                case "/":
                     s = new Divide();
                     break;
                default:
                     System.out.println("输入运算符有误");
                     break;
            }
        }catch (Exception e){
            System.out.println("输入有误"+e.getMessage());
        }
        return s;
    }
}

  • 总结

简单工厂模式虽然不完美,但是有它的闪光点,根据场景,灵活使用。

猜你喜欢

转载自www.cnblogs.com/fonxi/p/10850768.html