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

  • 相关阅读:
    eclipse 中文乱码
    为linux下ibus输入法添加搜狗词库
    汇编语言数据类型与声明
    linux下访问小米手机sd卡
    ubuntu linux下真机调试android程序
    Rhythmbox mp3音乐乱码的解决办法
    初学python线程(转)
    linux下安装安装BeautifulSoup
    django模板过滤器
    django使用静态文件
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9622715.html
Copyright © 2011-2022 走看看