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();
        }
    }

    输出:

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

  • 相关阅读:
    数据库Mysql给用户赋予操作表的权限
    C# log4net日志分等级打日志
    C# 将字符串转为函数名
    C# winform无法拖动控件
    C# 程序获取管理员方法
    C# 生成程序目录避免生成多余的XML和pdb
    C# 快速获取一个月的天数或最后一天
    正则
    C# 根据服务名打开所在文件夹
    330 div+css Experience
  • 原文地址:https://www.cnblogs.com/LUA123/p/7794956.html
Copyright © 2011-2022 走看看