Java设计模式—工厂方法

    xiaoxiao2025-06-11  33

    什么是工厂

    我们的日常理解,例如电子制造厂,工厂的作用就是制造我们需要的产品,例如手机,平板,电脑等。再用面向对象来理解,手机,平板,电脑就是对象,也就是说,工厂是用来生产对象的,我们需要什么就跟工厂拿。假如没有工厂的情况下,我们要什么就得自己做,因此工厂为我们提供了便利。

    工厂方法联系生活

    假如你开了一家公司,你一个合作的客户需要一大批的手机,假如你公司没有下属工厂,那你得自己做。假如你有工厂,你可以把生产的工作交给工厂,而你专注于其它方面的工作,例如跟其它客户交谈。

    此时的模式从: 客户(提出需求) —> 公司,公司 (制造产品)—> 客户 转变为: 客户(提出需求) —> 公司,公司 (分配任务)—> 工厂,工厂(制造产品)—> 公司,公司 (提供产品)—> 客户

    这样的好处是,降低了公司和客户的耦合,使得公司可以着手做其他工作!

    代码分析

    interface Electronic{//电子产品 void type(); } interface ElectronicFactory{//电子产品工厂 Electronic getElectronic();//制造产品 } class IPhone implements Electronic{ @Override public void type() { System.out.println("I am a iPhone"); } } class IPad implements Electronic{ @Override public void type() { System.out.println("I am a iPad"); } } class IPhoneFactory implements ElectronicFactory{ @Override public Electronic getElectronic() { return new IPhone();//制造一个iPhone } } class IPadFactory implements ElectronicFactory{ @Override public Electronic getElectronic() { return new IPad();//制造一个iPad } } public class Company { static void getProducts(ElectronicFactory factory){ Electronic electronic = (IPhone) factory.getElectronic(); electronic.type(); } public static void main(String[] args){ getProducts(new IPhoneFactory());//需要iPhone //getProducts(new IPadFactory ());//需要iPad } }

    工厂方法大概就是这么回事,但是我们还可以优化上面这个工厂模式。

    更优雅的工厂方法实现

    使用匿名内部类来实现工厂

    interface Electronic{//电子产品 void type(); } interface ElectronicFactory{//电子产品工厂 Electronic getElectronic();//制造产品 } class IPhone implements Electronic{ @Override public void type() { System.out.println("I am a iPhone"); } public static ElectronicFactory factory = new ElectronicFactory() { @Override public Electronic getElectronic() { return new IPhone(); } }; } class IPad implements Electronic{ @Override public void type() { System.out.println("I am a iPad"); } public static ElectronicFactory factory = new ElectronicFactory() { @Override public Electronic getElectronic() { return new IPad(); } }; } public class Company { static void getProducts(ElectronicFactory factory){ Electronic electronic = (IPhone) factory.getElectronic(); electronic.type(); } public static void main(String[] args){ getProducts(IPhone.factory);//需要iPhone getProducts(IPad.factory);//需要iPad } }

    最后有一点也要切记,不要为了使用设计模式而使用设计模式

    转载请注明原文地址: https://ju.6miu.com/read-1299843.html
    最新回复(0)