设计模式之工厂模式

栏目: 后端 · 发布时间: 6年前

内容简介:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例它有这三种角色举个例子,我们是一个电脑代工商,主要生产联想、华硕、惠普的电脑。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例

设计模式之工厂模式

它有这三种角色

  • Factory:工厂类,它负责实现创建所有实例。工厂类的创建产品类可以被外界调用,创建所需的对象。
  • IProduct:抽象产品类,这是所有产品的父类,用于描述所有产品应该有的共同方法
  • Product:具体产品类

举个例子,我们是一个电脑代工商,主要生产联想、华硕、惠普的电脑。

首先创建计算机抽象产品类,用来描述共同特征

public abstract class Computer{
  //所有电脑都有开机功能
  public abstract void start();
}

接下来创建具体产品类

public class LenvoComputer extends Computer{
  @Override
  public void start(){
    System.out.println("联想计算机启动");
  }
}

public class HpComputer extends Computer{
  @Override
  public void start(){
    System.out.println("惠普计算机启动");
  }
}

public class AsusComputer extends Computer{
  @Override
  public void start(){
    System.out.println("华硕计算机启动");
  }
}

创建一个工厂类,它提供一个createComputer来生产计算机。

public class ComputerFactory{
  public static Computer createComputer(String type){
    Computer mComputer = null;
    switch (type){
      case "lenovo":
        mComputer = new LenvoComputer();
        break;
      case "hp":
        mComputer = new HpComputer();
        break;
      case "asus":
        mComputer = new AsusComputer();   
        break;
    }
    return mComputer;
  }
}

客户端调用工厂类,创建一个惠普电脑,并开机

public class Client {
  public static void main(String[] args){
    ComputerFactory.createComputer("hp").start();
  }
}

在这里你们也觉察到了,这里电脑的类型是确定的,要增加新类型,就要修改工厂,这意味着它已经违背了开放封闭原则。当然它也有优点,就是让用户根据参数获得对应的类的实例,避免直接实例化类,降低耦合性。因此这个模式适用的场景是创建的对象类别比较少的情况。

工厂方法模式

定义一个用于创建对象的接口,让工厂决定实例化哪个类。工厂方法将一个类的实例化推迟到子类。

设计模式之工厂模式

首先创建计算机抽象产品类,用来描述共同特征

public abstract class Computer{
  //所有电脑都有开机功能
  public abstract void start();
}

接下来创建具体产品类

public class LenvoComputer extends Computer{
  @Override
  public void start(){
    System.out.println("联想计算机启动");
  }
}

public class HpComputer extends Computer{
  @Override
  public void start(){
    System.out.println("惠普计算机启动");
  }
}

public class AsusComputer extends Computer{
  @Override
  public void start(){
    System.out.println("华硕计算机启动");
  }
}

创建抽象工厂

public abstract class IComputerFactory{
  public abstract <T extends Computer> T createComputer(Class<T> clz);
}

创建具体工厂,通过反射来生产不同厂家的计算机

public class ComputerFactory extends IComputerFactory{
  @Override
  public  <T extends Computer> T createComputer(Class<T> clz){
    Computer computer = null;
    String className = clz.getName();
    try{
      computer = (Computer) Class.fromName(className).newInstance();
    }catch (Exception e) {
      e.printStackTrace();
    }
    return (T) computer;
  }
}

客户端调用

public class Client {
  public static void main(String[] args){
    ComputerFactory computerFactory = new ComputerFactory();
    LenvoComputer lenovo = computerFactory.createComputer(LenvoComputer.class);
    lenovo.start();
  }
}

对于简单工厂模式,实例化位于工厂类,当我们需要增加产品时,就需要在工厂类中加一个case,这就违背开放封闭原则。而在工厂模式,由于是通过反射的形式,我们不需要修改工厂的代码。


以上所述就是小编给大家介绍的《设计模式之工厂模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

理想主义者

理想主义者

[美] 贾斯汀·彼得斯 / 程静、柳筠 / 重庆出版社 / 2018-5-15 / 49.80元

2013年1月11日,年仅26岁的黑客亚伦·斯沃茨自杀身亡,此事在美国引起轩然大波。这不仅是因为在互联网领域,斯沃茨是一个可以与比尔·盖茨、马克·扎克伯格、理查德·斯托曼等齐名的人,更是因为此事揭露了传统世界与互联网世界的规则冲突。 在互联网思维下,信息是明码标价的商品。各种利益方用技术竖起了一道道藩篱,将支付不起费用但渴望用知识改变命运的人隔绝在外。于是,一大批希望改变这种模式的“理想主义......一起来看看 《理想主义者》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具