• 《图解设计模式》读书笔记2-2 Factory Method模式


    类图

    代码

    //产品类,任意可“use”的产品都可继承该类
    public abstract class Product {
        public abstract void use();
    }
    
    //工厂类
    //定义了创建一个产品的流程,具体的创建代码需要子类实现
    public abstract class Factory {
        public final Product create(String owner) {
            Product p = createProduct(owner);
            registerProduct(p);
            return p;
        }
    
        protected abstract Product createProduct(String owner);
        protected abstract void registerProduct(Product product);
    }
    
    //一个具体的产品类
    public class IDCard extends Product {
        private String owner;
        IDCard(String owner) {
            System.out.println("制作"+owner+"的ID卡");
            this.owner = owner;
        }
    
        @Override
        public void use() {
            System.out.println("使用"+owner+"的ID卡");
        }
    
        public String getOwner() {
            return owner;
        }
    }
    
    //生产IDCard的工厂类
    public class IDCardFactory extends Factory {
        private List owners = new ArrayList();
    
        @Override
        protected Product createProduct(String owner) {
            return new IDCard(owner);
        }
    
        @Override
        protected void registerProduct(Product product) {
            owners.add(((IDCard)product).getOwner());
        }
    
        public List getOwners() {
            return owners;
        }
    }
    
    

    角色介绍

    • Product:是一个抽象类,定义了在工厂方法模式中生成的类所具有的接口(API)

    • Creator:负责生成Product角色的抽象类。不用new关键字生成实例,而是调用生成实例的方法来创建实例,防止基类和其他具体的类耦合。它只知道调用方法可以生成实例,对具体生成实例的ConcreteCreator一无所知,对具体方法的实现也一无所知。

    • ConcreteProduct:具体的产品类。

    • ConcreteCreator:具体的创建产品类的工厂。

    思想

    • 通过继承Product和Creator,我们可以创建各种各样的具体的工厂和产品,Product和Creator无需关心具体实现,他们不依赖于具体的工厂和产品的实现。

    • 可以将Product和Creator封装成一个框架,需要的时候直接引入,继承即可。

  • 相关阅读:
    nginx的root和alias详解
    nginx location匹配细节讲解
    nginx的域名访问和路径结尾斜杠问题
    redis知识点入门
    nodepad++未保存文件的内容安不安全?
    secureCRT或Xshell的隧道转发详解
    XXE漏洞示例讲解
    内核Hash表hlist Hello
    tracer ftrace笔记(6)—— SQL查询 Hello
    MTK Powerhal 学习笔记 Hello
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10992880.html
Copyright © 2020-2023  润新知