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

  • 相关阅读:
    Redis安装配置
    Git本地服务器搭建
    JDK安装配置
    ssh免密登录
    设计模式
    IDEA 快捷键
    LeetCode Sliding Window Maximum
    ElasticSearch 使用小结
    LeetCode Product of Array Except Self
    LeetCode Delete Node in a Linked List
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9622715.html
Copyright © 2011-2022 走看看