• 抽象工厂模式


    问题:
    “工厂方法模式”很好地解决了产品类横向增长的问题,而“抽象工厂模式”则是在“工厂方法模式”的基础上,考虑如何将产品类进行纵向增长的问题。

    概念:
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    实现:
    1. 类图示例:

    2. 代码示例:

    //创建者抽象基类
    abstract class CommsManager
    {
    	abstract public function getHeaderText();
    	abstract public function getApptEncoder();
    	abstract public function getTtdEncoder();
    	abstract public function getContactEncoder();
    	abstract public function getFooterText();
    }
    //创建者子类
    class BloggsCommsManager extends CommsManager
    {
    	public function getHeaderText()
    	{
    		return "BloggsCal header
    ";
    	}
    	public function getApptEncoder()
    	{
    		return new BloggsApptEncoder();
    	}
    	public function getTtdEncoder()
    	{
    		return new BloggsTtdEncoder();
    	}
    	public function getContactEncoder()
    	{
    		return new BloggsContactEncoder();
    	}
    	public function getFooterText()
    	{
    		return "BloggsCal footer
    ";
    	}
    }
    

    效果:
    优点:
    1. 只对系统中功能相关的元素强制进行组合。易于切换产品系列,只要改变实例化的具体工厂,就可以切换到不同的产品系列。
    2. 产品实例创建与客户端分离。
    缺点:
    1. 添加新产品时,不仅要创建新产品的具体实现,为了支持它,还需要修改抽象创建者和它的每一个具体实现。

  • 相关阅读:
    Redis配置参数详解
    amoeba实现读写分离
    P1525 关押罪犯 并查集
    模板汇总——treap
    差分约束
    HDU
    CodeForces 522C Chicken or Fish?
    CodeForces 812E Sagheer and Apple Tree 树上nim
    CodeForces 855E Salazar Slytherin's Locket
    CodeForces 283C World Eater Brothers
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9622715.html
Copyright © 2020-2023  润新知