内容简介:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例它有这三种角色举个例子,我们是一个电脑代工商,主要生产联想、华硕、惠普的电脑。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例
它有这三种角色
- 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,这就违背开放封闭原则。而在工厂模式,由于是通过反射的形式,我们不需要修改工厂的代码。
以上所述就是小编给大家介绍的《设计模式之工厂模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。