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
        }
    }

    总结

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

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

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

  • 相关阅读:
    Java nio Socket非阻塞模式
    Android执行文件apk的组成结构
    C++大会归来
    C++大会的入场卷已入手
    DVB vs. SVB+Shader & Instancing
    放一个半年前写的Python静态检查编译器
    GCC 4.1 Released
    C++大会后的一些感想
    多核技术来临?
    Notepad++ v3.3 released
  • 原文地址:https://www.cnblogs.com/zawier/p/6890655.html
Copyright © 2011-2022 走看看