• 案例分析:设计模式与代码的结构特性


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

    简单工厂模式简介

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

    它是 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. 一个具体工厂只能创建一种具体产品

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

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

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

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

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

    利用抽象类实现。

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

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




  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/zzydexiaowu/p/12003385.html
Copyright © 2020-2023  润新知