zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式(Simple Factory)
        简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。(自百度百科)
     
    简单工厂模式的UML图
     
    简单工厂模式UML图
     
    可以看到,简单工厂模式一共有三个角色:
    工厂角色:简单工厂角色的核心,包含所有产品的创建逻辑。具体为,获取外部传递的需要创建的产品的信息,从而生产具体的产品,具体生产什么产品,取决于你想生产什么产品,工厂做的只是接收信息,生产具体能够生产的产品就好了。
    抽象产品角色:所有产品的父类,描述所有产品的共有特征。
    具体产品角色:具体要生产的产品,继承抽象产品,有自己特有的特征,简单工厂的创建目标。
     
    简单工厂模式代码实现(以生产手机为例)
    抽象产品类
    public abstract class Cellphone {
        public abstract void phone();
    }
    具体产品
    //oppo
    public class Oppo extends Cellphone{
        @Override
        public void phone() {
            System.out.println("oppo手机");
        }
    }
    //华为
    public class Huawei extends Cellphone{
        @Override
        public void phone() {
            System.out.println("华为手机");
        }
    }
    //vivo
    public class Vivo extends Cellphone {
     
        @Override
        public void phone() {
            System.out.println("vivo手机");
        }
    }
    工厂类
    public class CellphoneFactory {
        public static Cellphone makePhone(String cellphoneName){
            Cellphone cellphone = null;
            switch (cellphoneName) {
            case "vivo":
                cellphone = new Vivo();
                break;
            case "oppo":
                cellphone = new Oppo();
                break;
            case "huawei":
                cellphone = new Huawei();
                break;
            default:
                break;
            }
            return cellphone;
        }
    }
    客户端调用及结果
    public class Client {
        public static void main(String[] args) {
            Cellphone cellphone1 = CellphoneFactory.makePhone("huawei");
            cellphone1.phone();
            
            Cellphone cellphone2 = CellphoneFactory.makePhone("vivo");
            cellphone2.phone();
            
            Cellphone cellphone3 = CellphoneFactory.makePhone("oppo");
            cellphone3.phone();
        }
    }

     
    简单工厂模式的优缺点分析
    优点:工厂类中包含了生产具体产品的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。也就是说,不需要知道具体产品生产的原理,如手机的制作流程,只需要知道自己想要哪种手机,剩下的交给工厂就好了,手机怎么生产出来的,是哪个具体的手机,均与客户端无关,反正它都是手机。
    缺点:由于工厂类中包含了所有的产品创建逻辑,一旦这个工厂出现问题不能工作了,那么所有客户端都会受到影响。并且,如果要增加新的产品生产线,不但要增加新的产品实现类,还需要在工厂类中增加产品生产的逻辑判断,这也就意味着对修改开放了,违背了“开放-封闭原则”——对扩展开放,对修改封闭。
     
     
     

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    javaee后台适合用的编辑器插件
    昨天做了一个使用javamail发送文件的demo
    jsp页面可以巧用模态框
    jQuery 表单验证插件——Validation(基础)
    jsp引入struts标签,引入自己写的jquery需要注意的问题
    LeetCode的神坑
    Java函数结束时的内存回收坑
    递归与回溯1
    由树的定义和递归想到的
    复杂一点的二叉树递归
  • 原文地址:https://www.cnblogs.com/huiling1809/p/7363448.html
Copyright © 2011-2022 走看看