美文网首页
工厂方法解析

工厂方法解析

作者: zhuhuix | 来源:发表于2020-03-25 10:04 被阅读0次

    针对简单工厂违背开闭原则,设计模式中引入了工厂方法模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

    UML图: 在这里插入图片描述

    • 通过抽象类的方式定义Phone,并定义抽象方法produce
    • 通过接口的方式定义PhoneFactory,并定义接口方法getPhone
    • 通过继承抽象类Phone定义ApplePhone,并覆盖重写抽象方法produce进行具体产品的生产
    • 通过实现接口PhoneFactory定义ApplePhoneFactory,并覆盖重写接口方法getPhone返回具体对象
    • 通过实现接口PhoneFactory定义HuaweiPhoneFactory,并覆盖重写接口方法getPhone返回具体对象
    • 定义测试类Test创建ApplePhoneFactory和HuaweiPhoneFactory进行测试

    代码:

    //Phone抽象类
    public abstract class Phone {
        abstract  void produce();
    }
    //PhoneFactory接口
    public interface PhoneFactory {
        Phone getPhone();
    }
    //通过继承抽象类定义ApplePhone
    public class ApplePhone extends  Phone {
        @Override
        void produce() {
            System.out.println("生产苹果手机");
        }
    }
    //通过实现接口定义ApplePhoneFactory
    public class ApplePhoneFactory implements PhoneFactory {
        @Override
        public Phone getPhone() {
            return new ApplePhone();
        }
    }
    //通过继承抽象类定义HuaweiPhone
    public class HuaweiPhone extends Phone {
        @Override
        void produce() {
            System.out.println("生产华为手机");
        }
    }
    //通过实现接口定义HuaweiPhoneFactory
    public class HuaweiPhoneFactory implements PhoneFactory {
        @Override
        public Phone getPhone() {
            return new HuaweiPhone();
        }
    }
    //Test测试类
    public class Test {
        public static void main(String[] args) {
            PhoneFactory phoneFactory= new ApplePhoneFactory();
            phoneFactory.getPhone().produce();
    
            PhoneFactory phoneFactory1 = new HuaweiPhoneFactory();
            phoneFactory1.getPhone().produce();
        }
    }
    

    总结:

    工厂方法模式是简单工厂模式的衍生,遵循设计模中的“开闭”原则。在工厂方法模中有一个抽象的Factory类(可以是抽象类也可以是接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品

    相关文章

      网友评论

          本文标题:工厂方法解析

          本文链接:https://www.haomeiwen.com/subject/brctuhtx.html