zoukankan      html  css  js  c++  java
  • 抽象工厂模式

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

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

    实现:
    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. 添加新产品时,不仅要创建新产品的具体实现,为了支持它,还需要修改抽象创建者和它的每一个具体实现。

  • 相关阅读:
    OCP-1Z0-053-V12.02-597题
    OCP-1Z0-053-V12.02-599题
    OCP-1Z0-053-V12.02-609题
    OCP-1Z0-053-V12.02-604题
    OCP-1Z0-053-V12.02-607题
    OCP-1Z0-053-V12.02-588题
    OCP-1Z0-053-V12.02-592题
    OCP-1Z0-053-V12.02-587题
    OCP-1Z0-053-V12.02-582题
    OCP-1Z0-053-V12.02-583题
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9622715.html
Copyright © 2011-2022 走看看