zoukankan      html  css  js  c++  java
  • 案例分析:设计模式与代码的结构特性

    本文介绍的是设计模式的一种——简单工厂模式

    简单工厂模式简介

    简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。

    它是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

    在简单工厂模式中,可以根据参数的不同返回不同类的实例。

    简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    简单工厂模式结构图

    简单工厂模式简单实现

    主要角色
    工厂:负责实现创建所有实例的内部逻辑,并提供一个外界调用的方法,创建所需的产品对象。
    抽象产品:负责描述产品的公共接口
    具体产品:描述生产的具体产品。
    举个简单易懂的例子:
    “假设”有一台炒菜机(工厂),可以做出各种不同的菜品(抽象产品),有三个按钮(参数)对应这三种菜品(具体产品)。
    这时候你可以根据点击按钮来选择你喜欢的菜品。

    步骤 1

    创建抽象产品类

    我们创建一个抽象产品类,他有一个抽象方法用于启动做菜:

    package 软件工程作业;
    
    public abstract class Product {
       /**
         * 产品的抽象方法,由具体的产品类去实现
          */
        public abstract void start();
    }
    

      

    步骤2

    创建具体菜品类

    接着我们创建各个不同的菜A、B、C,他们都继承了他们的父类Product ,并实现了父类的start方法:

    package 软件工程作业;
    
    public class Aproduct extends Product{
        @Override
        public void start() {
            System.out.println("开始做菜A");
        }
    }
    

      

    package 软件工程作业;
    
    public class Bproduct extends Product{
        @Override
        public void start() {
            System.out.println("开始做菜B");
        }
    }
    

      

    package 软件工程作业;
    
    public class Cproduct extends Product{
        @Override
        public void start() {
            System.out.println("开始做菜C");
        }
    }package 软件工程作业;
    

      

    步骤 3

    接下来创建一个工厂类,它提供了一个静态方法cookProduct用来做菜。你只需要传入你想做的菜名,它就会实例化相应品牌的菜对象:

    package 软件工程作业;
    
    public class Factory {
        public static Product cookProduct(String type){
        	Product m=null;
            switch (type) {
                case "A":
                    m=new Aproduct();
                   break;
                case "B":
                    m=new Bproduct();
                    break;
                case "C":
                    m=new Cproduct();
                    break;
    
            }
            return m;
        }
    }
    

    步骤4

    客户端调用工厂类,传入“A”生产出菜A并调用该菜的start方法:

    package 软件工程作业;
    
    public class Cookproduct {
    	public static void main(String[]args){
    	      Factory.cookProduct("A").start();
    	}
    }
    终端输出结果:

    优点:

    1. 符合开-闭原则:新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可
    2. 符合单一职责原则:每个具体工厂类只负责创建对应的产品

    缺点:

    1. 增加了系统的复杂度:类的个数将成对增加
    2. 增加了系统的抽象性和理解难度
    3. 一个具体工厂只能创建一种具体产品

    在以下情况下可以使用简单工厂模式:

    • 工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
    • 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。

    解释其中用到的多态机制:

    通过写一个抽象类里面有一个抽象方法,别的类继承抽象类,重写抽象类中的抽象方法实现了一种多态。

     说明模块抽象封装的方法:

    利用抽象类实现。

     分析各个模块的内聚度和模块之间的耦合度:

    每个不同类实现不同的抽象方法,需要什么类什么方法就加上什么类什么方法,提高了模块的内聚度,降低了模块之间的耦合度。实现了“开放-封闭”原则,这样模块更加清晰,每个部分都各司其职,分工明确,可维护性更好。




  • 相关阅读:
    Java基础知识面试题(2021年最新版,持续更新...)整理
    windows10 cmd窗口输出卡住(看这篇就够了)
    windows10 powershell窗口输出卡住(看这篇就够了)
    Golang函数相关
    内存对齐详解
    Go编程模式Pipeline
    管道符、重定向与环境变量(Linux就该这么学第三章)
    GMP模型简介
    新手必须掌握的Linux命令(Linux就该这么学第二章)
    Goland运行项目报错:CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。
  • 原文地址:https://www.cnblogs.com/zzydexiaowu/p/12003385.html
Copyright © 2011-2022 走看看