`

设计模式之抽象工厂(AbstractFactory)---用抽象工厂实现网页样式生成器

阅读更多

 意图[gof 设计模式]:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

     我们经常会碰到这样一种情况,我们需要一系列的平级对象来共同完成一种服务。对象的变化更多的是系列间的变化,而不是系列对象内部关系的变化。比如说数据库操作相关类。命令对象,链接对象,适配器对象。我们需要增加一种新数据访问相关对象的可能性比较小。但是从mssql 命令对象,连接对象....到oracle命令对象,连接对象....的可能性则大得多。那么怎样实现一种面向在系列对象变化方向扩展性的解决方案呢。答案就是抽象工厂。

下面来分析一个具体情景:
    假如我要一个html 生成器,生成的html 粗略的分成 head、 body 、foot 三个部分。 head+ body +foot 这种抽象的结构是相对稳定的。但是具体的样式可能分为古典型(古典型head + 古典型 body + 古典型 foot),时尚型(时尚型 head + 时尚型 body +时尚型 foot)。。。而这种风格类别的改变是相对频繁的。那么我们可以通过抽象工厂解决。



以下是网页生成器的类图:
            

 注意gof 抽象工厂里产品的抽象是接口,我这里用到的是抽象类是考虑到head ,body ,foot 本身会涉及到一些自有的属性。

public  abstract class Abody
    
{
       
public virtual string Render()
       
{
           
return this.ToString();
       }

    }

 public class ClassicBody:Abody
    
{
       
public override string Render()
        
{
            
return this.ToString();
        }

    }

public  class VogueBody:Abody
    
{
    }

  public interface IFactory
    
{
       AHead CreateHead();
       Abody CreateBody();
       Afoot CreateFoot();
    }

 public class VogueFactory : IFactory
    
{
        
public AHead CreateHead()
        
{
            
return new VogueHead();
        }

        
public Abody CreateBody()
        
{
            
return new VogueBody();
        }

        
public Afoot CreateFoot()
        
{
            
return new VogueFoot();
        }

    }


 public class ClassicFactory:IFactory
    
{

        
public AHead CreateHead()
        
{
            
return new ClassicHead();
        }

        
public Abody CreateBody()
        
{
            
return new ClassicBody();
        }

        
public Afoot CreateFoot()
        
{
            
return new ClassicFoot();
        }

    }


  protected void Page_Load(object sender, EventArgs e)
        
{
            IFactory factory 
= new VogueFactory();
            
bool first = true;
            System.Text.StringBuilder sb 
= new System.Text.StringBuilder();
        l:
           sb.Append( factory.CreateHead().Render()).Append(
"<br>");
            sb.Append( factory.CreateBody().Render()).Append(
"<br>");
            sb.Append(  factory.CreateFoot().Render()).Append(
"<br>");
            Response.Write(sb.ToString());
            
if (first)
            
{
                factory 
= new ClassicFactory();
                sb 
= new System.Text.StringBuilder();
                first 
= false;
                
goto l;
            }

运行结果:
AbstractFactory.VogueHead
AbstractFactory.VogueBody
AbstractFactory.VogueFoot
AbstractFactory.ClassicHead
AbstractFactory.ClassicBody
AbstractFactory.ClassicFoot
分享到:
评论

相关推荐

    NET设计模式之抽象工厂模式[归纳].pdf

    《NET设计模式之抽象工厂模式》 抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的...

    java常用设计模式-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式...

    设计模式常用设计模式介绍抽象工厂、生成器、工厂方法

    第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 ...1.8 怎样使用设计模式 20

    设计模式习题答案-抽象工厂、生成器.ppt

    设计模式习题答案-抽象工厂、生成器.ppt

    JAVA设计模式之抽象工厂模式案例

    抽象工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象组族的接口,而无需指定其具体类。这种模式的关键在于抽象工厂,它定义了一组产品对象的接口,并且允许子类根据不同的实现来生产一系列...

    概括设计模式,举例详解抽象工厂模式

    ### 概述设计模式:以抽象工厂模式为例深入解析 设计模式是在软件工程领域中,为解决特定问题而总结出的、经过验证的解决方案。它们是开发者在长期实践中提炼出来的智慧结晶,旨在提高代码的可读性、可维护性和可...

    设计模式复习题.doc

    "设计模式复习题.doc" 以下是根据给定文件生成的相关...以上是根据给定文件生成的相关知识点,涵盖了设计模式的种类、基本要素、应用场景、设计原则、实现方式、优点、应用领域、设计模式、常见问题和学习方法等方面。

    抽象工厂-比较经典

    此外,`abstractFactory.zip`这个文件很可能包含了抽象工厂模式的示例代码,通过解压并阅读这些代码,可以更深入地理解抽象工厂模式的实现细节。代码示例通常会包含工厂接口、具体工厂类、产品接口和产品实现类,...

    UIKit+Abstract-Factory

    抽象工厂设计模式是一种创建型设计模式,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式特别适合于iOS开发,因为`UIKit`中有很多类似的对象,如视图(`UIView`)、控制器(`...

    第6章 抽象工厂模式.pptx

    - **抽象工厂(AbstractFactory)**:定义了一个用于创建产品族的接口。 - **具体工厂(ConcreteFactory)**:实现了抽象工厂接口,并根据具体需求创建相应的产品族。 - **抽象产品(AbstractProduct)**:定义了...

    抽象工厂7层架构(C#源码)

    抽象工厂模式是设计模式中的一个核心概念,它属于创建型模式,主要用来提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。在C#中,抽象工厂模式的应用可以使得代码更加灵活,易于扩展,同时降低...

    三层代码生成模板(非抽象工厂)

    标题中的“三层代码生成模板(非抽象工厂)”指的是一个用于自动化生成三层架构代码的工具,它不是基于抽象工厂设计模式。抽象工厂模式是一种创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    设计模式:01工厂模式-labview实现

    工厂模式是其中最常用的一种创建型设计模式,它的核心思想是提供一个接口或抽象类,用于创建相关或依赖对象的家族,而无需指定它们的具体类。在“设计模式:01工厂模式-labview实现”这个主题中,我们将深入探讨如何...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    创建型模式 (100%) 设计模式面面观(5):抽象工厂模式(AbstractFactory)-创建型模式 (100%) 设计模式面面观(6):生成器模式(Builder)-创建型模式 (100%) 设计模式面面观(7):原型模式(Prototype...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...

    动软代码生成器,自动生成设计模式代码

    通过动软代码生成器,开发者可以选择并应用各种设计模式,如工厂模式、单例模式、观察者模式、装饰器模式、策略模式等,这些模式可以有效地提高代码的可读性、可维护性和可扩展性。 代码生成器的核心功能包括: 1....

Global site tag (gtag.js) - Google Analytics