zoukankan      html  css  js  c++  java
  • Java设计模式--工厂方法模式

    角色

    抽象工厂:担任这个角色是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类都必须实现这个接口。

    具体工厂:担任这个角色的是实现了抽象工厂接口的具体Java类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用来创建产品对象。

    抽象产品:工厂方法模式所创建对象的超类型,也就是产品对象的共同父类或接口。

    具体产品:这个角色实现了抽象产品接口。

    结构图

     

     抽象工厂:

    package com.design.factorymethod;
    
    public interface Factory {
    
        Product createProduct();
    }

    抽象产品:

    package com.design.factorymethod;
    
    public interface Product {
    
        void productInfo();
    }

    具体产品:

    package com.design.factorymethod;
    
    public class ProductA implements Product {
        @Override
        public void productInfo() {
            System.out.println("Product A");
        }
    }
    package com.design.factorymethod;
    
    public class ProductB implements Product {
        @Override
        public void productInfo() {
            System.out.println("Product B");
        }
    }

    具体工厂:

    package com.design.factorymethod;
    
    public class FactoryA implements Factory {
        @Override
        public Product createProduct() {
            return new ProductA();
        }
    }
    package com.design.factorymethod;
    
    public class FactoryB implements Factory {
        @Override
        public Product createProduct() {
            return new ProductB();
        }
    }

    测试:

    package com.design.factorymethod;
    
    public class Client {
    
        private static Factory factoryA, factoryB;
        private static Product productA, productB;
        public static void main(String[] args){
            factoryA = new FactoryA();
            factoryB = new FactoryB();
            productA = factoryA.createProduct();
            productB = factoryB.createProduct();
            productA.productInfo();
            productB.productInfo();
        }
    }

    输出:

    工厂方法模式和简单工厂模式的区别:工厂方法模式的核心是一个抽象工厂类,而简单工厂模式的核心是一个具体类

  • 相关阅读:
    docker log
    byte转String防止乱码
    SQL索引
    Redis 总结精讲
    如何保证消息队列是高可用的
    消息中间件(一)MQ详解及四大MQ比较
    @Bean和@Componet区别
    理解Spring的AOP和Ioc/DI就这么简单
    SpringBoot 基础
    《Linux 鸟哥私房菜》 第6章 Linux的文件权限与目录配置
  • 原文地址:https://www.cnblogs.com/LUA123/p/7794956.html
Copyright © 2011-2022 走看看