zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式学习笔记

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

    简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(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;
        }
    }
    

    • 总结

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

  • 相关阅读:
    [转]Linq使用心得——SelectMany替代二重foreach循环
    设计模式—装饰者模式
    设计模式—桥接模式
    iOS_autoLayout_Masonry
    排序算法
    h.264硬件解码
    FFmpegh.264解码
    AAC编解码
    socket UDP简单通讯
    socket TCP简单通讯
  • 原文地址:https://www.cnblogs.com/fonxi/p/10850768.html
Copyright © 2011-2022 走看看