zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

    工厂

    UML图:

    public interface ICar {
    // 由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
    }

    public class TopCar implements ICar {}

    public class MidCar implements ICar {}

    public class LowCar implements ICar {}

    public abstract class AbstractFactory {
    public abstract ICar create();
    }

    public class TopFactory extends AbstractFactory {
    @Override
    public ICar create() {
    return new TopCar();
    }
    }

    public class MidFactory extends AbstractFactory {
    @Override
    public ICar create() {
    return new MidCar();
    }
    }

    public class LowFactory extends AbstractFactory {
    @Override
    public ICar create() {
    return new LowCar();
    }
    }

    public class FactoryTest {
    public static void main(String[] args) {
    AbstractFactory obj = new TopFactory();
    ICar car = obj.create();
    }
    }

    代码分析:

      1. 工厂模式功能编制步骤

    • 定制抽象产品接口,如ICar。
    • 定制具体产品子类,如类TopCar、MidCar、LowCar。
    • 定制抽象工厂类(或接口),如AbstractFactory。其中有一个重要的create( )抽象方法。
    • 定制具体工厂子类,如UpFactory、MidFactory、DnFactory。

      2. 工厂与简单工厂模式的区别

    • 工厂模式把简单工厂中具体的工厂类(如CarSimpleFactory)划分为两层:抽象工厂层(如AbstractFactory)+具体工厂子类层(如TopFactory等)。抽象工厂层的划分丰富了框架的内涵,符合从一般到特殊的语义特点。
    • create( )方法参数的理解:在简单工厂中,create(String mark)是成员方法,表明在该方法中管理多个产品,根据mark的值产生并返回ICar对象;在工厂模式中,create( )是抽象方法,无参数,表明在具体的子类工厂中创建某个具体的产品。
    • 工厂方法更易于软件的二次开发维护,主要特征是:当需求分析发生变化时,只需要增加、删除相应的类,而不是修改已有的类。例如,若又生产一种高档的小汽车,只需要增加SuperCar 及 SuperFactory 两个类:

      若在简单工厂中,则必须修改CarSimpleFactory 工厂类中的create( )方法,增加选择分支。

  • 相关阅读:
    Flex 布局
    vue学习之用 Vue.js + Vue Router 创建单页应用的几个步骤
    vue学习起步:了解下
    vue学习一:新建或打开vue项目(vue-cli2)
    adb环境变量配置
    数据类型判断和数据类型转换代码工具
    日期工具集合
    postman变量的使用和设置
    浮点数运算和金额处理
    07- Linux常用命令
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/14231595.html
Copyright © 2011-2022 走看看