zoukankan      html  css  js  c++  java
  • 工厂方法模式笔记

    定义

    定义了一个创建对象的接口,让它的子类决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。

    使用

    一个工厂Factory接口,其中包含一个创建特定类的方法createProduce,这个方法由工厂接口的具体类来实现,每个实现类(如ConcreateFactoryA)会创建一个对应的,实现Product接口的具体类(如ProductA)并返回。

    代码(Java)

    // 产品接口
    public interface Product {
        void method();
    }
    ​
    // 产品类A
    public class ProductA implements Product {
        @Override
        public void method() {
            System.out.println("This is ProductA");
        }
    }
    ​
    // 产品类B
    public class ProductB implements Product {
        @Override
        public void method() {
            System.out.println("This is ProductB");
        }
    }
    ​
    // 工厂接口
    public interface Factory {
        Product createProduct();
    }
    ​
    // 生成产品A的工厂类
    public class ConcreteFactoryA implements Factory {
        @Override
        public Product createProduct() {
            return new ProductA();
        }
    }
    ​
    // 生成产品B的工厂类
    public class ConcreteFactoryB implements Factory {
        @Override
        public Product createProduct() {
            return new ProductB();
        }
    }
    ​
    // 测试类
    public class Client {
        public static void main(String[] args) {
            Factory factory = new ConcreteFactoryA();
            Product product = factory.createProduct();
            product.method(); // 输出:This is ProductA
            
            factory = new ConcreteFactoryB();
            product = factory.createProduct();
            product.method(); // 输出:This is ProductB
        }
    }

    总结

    将创建对象的代码集中在一个对象或方法中,可以避免代码中的重复,并且更方便以后的维护。

    当增加产品时,只需要增加对应的产品和工厂类,而不需要修改现有的代码,符合开-闭原则。

    同时也实现了针对接口编程,而不针对实现编程。

  • 相关阅读:
    Eclipse 3.7 安装Maven插件时报错:requires 'bundle org.slf4j.api 1.6.2' but it could not be found
    Windows下IIS+PHP5.3.x ZendGuardLoader的配置方法
    IIS7.x运行PHP
    顺手的Linux发行版及其工具推荐
    nc 简单的使用
    nginx日志简单分析工具
    批量转换cue文件编码
    Linux Tweak:交换 Caps_Lock 与 Control_R
    Word 2013测试
    start running 开始跑步减肥
  • 原文地址:https://www.cnblogs.com/zawier/p/6890655.html
Copyright © 2011-2022 走看看