• 工厂模式


    Product:抽象产品角色,它定义了这个产品的通用属性,相当于模子,它定义了一些功能,这些功能可以由子类去实现

    ConcreteProduct:具体产品角色,它实现了抽象产品所定义的功能,每个 ConcreteProduct 相当于一个产品种类

    Factory:抽象工厂,它定义了所有工厂都应该具有的功能

    ConcreteFactory:具体工厂模式类,它实现了抽象工厂定义的所有功能,负责创建具体的产品,它根据这个工厂的具体实现来生产具体的产品,但是这个产品也都具有符合抽象产品类定义的功能

    Client:

    package design.pattern.factory;
    
    public class Client {
        public static void main(String[] args) {
            Factory factory = new ConcreteFactory();
            try {
                System.out.println(factory.getProduct(ProductType.PA));
                System.out.println(factory.getProduct(ProductType.PB));
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("NO SUCH PRODUCT");
            }
        }
    }

    Factory:

    public interface Factory {
        public Product getProduct(ProductType product) throws Exception;
    }

    Product:

    package design.pattern.factory;
    
    public abstract class Product {
        protected String type;
        
        protected Product(String type) {
            this.type = type;
        }
        
        @Override
        public String toString() {
            return type;
        }
    }

    ConcreteFactory:

    package design.pattern.factory;
    
    public final class ConcreteFactory implements Factory {
    
        @Override
        public Product getProduct(ProductType product) throws Exception {
            switch (product) {
            case PA:
                return new ConcreteProductA("ConcreteProductA");
            case PB:
                return new ConcreteProductB("ConcreteProductB");
            case PC:
                return new ConcreteProductC("ConcreteProductC");
            default:
                throw new Exception();
            }
        }
    
    }

    ConcreteProductA:

    package design.pattern.factory;
    
    public final class ConcreteProductA extends Product {
        
        public ConcreteProductA(String type) {
            super(type);
        }
        
    }

    ConcreteProductB:

    package design.pattern.factory;
    
    public final class ConcreteProductB extends Product{
        public ConcreteProductB(String type) {
            super(type);
        }
    }

    ConcreProductC:

    package design.pattern.factory;
    
    public final class ConcreteProductC extends Product{
        public ConcreteProductC(String type) {
            super(type);
        }
    }

    ProductType:

    package design.pattern.factory;
    
    public enum ProductType {
        PA,PB,PC;
    }
  • 相关阅读:
    CSS3 not
    rxjs1
    Angular 2 组件之间如何通信?
    开发去。。
    补零补零
    MySQL数据库从复制及企业配置实践
    互联网中接口安全解决方案
    redis服务打不开--解决办法
    搭建Git服务器
    git将当前分支上修改的东西转移到新建分支
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7245679.html
Copyright © 2020-2023  润新知