`
dengzhangtao
  • 浏览: 678893 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设计模式-抽象工厂解析

阅读更多
对于学习编程的我们来说,要写可读性好的代码 ,完了还要维护,最好能重复使用,这样的代码就很优美了,但是真正能写出很优美的代码的人有多少,我们的前人总结了很经典的设计模式就是这样优美的, 只有优美的代码才能帮我们走的更远,让我的编程之路更加愉快。 
不管你是学习那种语言java也好c,c++,c# ,web中的jsp,php,asp还是其他的,我们说语言这东西其实真的是生生灭灭, 但是里面的思想,模式,是很难在一段时间里消亡的, 所以我们应该也好好的学习一下 设计模式,研究一下当中的精华思想。

好,我们开始。  设计模式是有这么几个分枝:1,Creational patterns构建模式 2,Sturctual patterns结构化模式 3,Behavioral  patterns 行为模式 


这三类模式很容易理解就是 设计中的三个步骤, 先有create 才会Struct ,再才有Behavior
还有模式的四个基本的要素:模式名称, 模式问题(阐述可能存在的问题和结果),解决方案,效果。

这篇我们先学习一下 Creational patterns中的几个设计模式
1,Abstract factory抽象工厂模式:
定义:recognizebale by creational methods returnning abstract/interface type.
通过创建的方法的返回的类型(抽象类或者是接口类) 来让系统识别 生产什么样的产品
example:
interface GUIFactory {    //多个产品类一体的工厂类
    public Button createButton();
}


class WinFactory implements GUIFactory {   //其中之一的产品的工厂类
    public Button createButton() {
        return new WinButton();
    }
}


class OSXFactory implements GUIFactory {//其中之一的产品的工厂类
    public Button createButton() {
        return new OSXButton();
    }
}



interface Button {       //抽象, 产品 (通过这个接口来拿具体的产品)
    public void paint();
}


class WinButton implements Button {   //具体产品的实现winButton
    public void paint() {
        System.out.println("I'm a WinButton");
    }
}


class OSXButton implements Button {  //具体产品的实现osxButton
    public void paint() {
        System.out.println("I'm an OSXButton");
    }
}
 
//////如果还有具体产品X,X1,X2  和上面同样

class Application {
    public Application(GUIFactory factory){  
        Button button = factory.createButton();   //如果还要增加产品, 这里不用改变!!
        button.paint();
    }
}

public class ApplicationRunner {
    public static void main(String[] args) {
        new Application(createOsSpecificFactory());//返回需要的接口type做参数
    }

    public static GUIFactory createOsSpecificFactory() {
        int sys = readFromConfigFile("OS_TYPE");
        if (sys == 0) {
            return new WinFactory();     //看这方法的返回类型 GUIFactory 和真实返回的,就知道是,抽象接口模式,  返回接口的实现类,
        } else {
            return new OSXFactory();    //指定要哪中具体的产品(实现类的名,)
        }
    }
}

上面的代码和注释, 好好的揣摩揣摩,想想这要的好处是什么?1 维护性也不错,只需要找到相应的产品工厂更改,2, 扩展性! 很明显如果还要增加一个产品类, 只要在写一個这个类的生产类实现最上面的工厂接口, 而这个产品要实现规定好的接口。  其他都没有改动,仅仅就是多写了你要添加的, 删除同理了,这样多个工厂的模式,产生了多个种产品的模式,就是抽象工厂模式了。
在什么时候用比较好呢,在什么情况下采用比较合理:

1, 系统要提供多个产品类的,所以的产品被抽象出一個接口类(比如上面的Button类)
2,这多个的产品工厂类必须要有共同点,才能抽象出來嘛,产品也必须有共同的。
使用interface都是先规定的好共同的操作名称和返回类型,还有字段。
所以同属于同一个产品族是在一起使用的。这一约束必须在系统的设计中体现出来。

  这个感觉理论上分析的差不多了
谢谢
分享到:
评论

相关推荐

    C#设计模式--抽象工厂(实例解析)

    在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。怎么应对这种变化?怎么绕过常规的对象的创建方法(new)...这就是我们要说的抽象工厂模式。  

    设计模式抽象工厂实验报告

    ### 抽象工厂模式实验报告知识点解析 #### 实验背景及目标 本次实验报告来源于南京工程学院软件设计与体系结构课程。实验的核心在于理解和实践**抽象工厂模式**,这是一种常用的面向对象设计模式,旨在解决软件...

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

    - 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而无需指定它们的具体类。 - 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示...

    C#设计模式:抽象工厂实例解析.7z

    在C#设计模式:抽象工厂实例解析的文档中,可能会详细解释如何通过C#代码实现这些角色,并给出具体的示例。例如,假设我们有一个跨平台的图形用户界面(GUI)应用,其中Windows平台和MacOS平台有不同的控件。我们...

    C#简单登录演示抽象工厂设计模式

    抽象工厂设计模式是其中一种创建型设计模式,它提供了一种创建对象家族的方法,这些对象来自同一个接口但属于不同的类。在这个“C#简单登录演示抽象工厂设计模式”的案例中,我们将深入探讨如何在C#中应用这个模式来...

    设计模式-简单工厂模式-例题

    为了解决这个问题,可以考虑使用其他更高级的设计模式,比如工厂方法模式或抽象工厂模式等。 总之,在实际开发过程中,选择合适的设计模式是非常重要的,简单工厂模式适用于产品种类较少且未来可能不会频繁发生变化...

    JAVA版-设计模式解析(第二版)综合项目实战pdf文档+视频教程

    本资源包“JAVA版-设计模式解析(第二版)综合项目实战pdf文档+视频教程”正是为了帮助开发者深入理解和运用这些模式而准备的。 PDF文档和视频教程结合,旨在通过实例项目的方式,让学习者能够直观地看到设计模式在...

    java之设计模式--各种设计模式解析

    本篇将详细解析几种常见的设计模式,包括单例模式、工厂模式和命令模式。 首先,我们来看工厂方法模式。在软件开发中,经常遇到需要创建对象,但具体创建哪种类型的对象取决于特定条件的情况。工厂方法模式提供了一...

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

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

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

    - 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 - 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...

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

    《设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版》是一份深入探讨软件工程中经典设计模式的重要资料,涵盖了面向对象编程中的核心设计原则和实践。这份资源主要关注GoF(Gang of Four,即《设计模式:可...

    Java设计模式之抽象工厂模式

    ### Java设计模式之抽象工厂模式解析 #### 一、什么是抽象工厂模式? 抽象工厂模式(Abstract Factory)是一种创建型设计模式,它为创建一组相关或相互依赖的对象提供了一个接口,而无需指定它们的具体类。这种...

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

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

    Java 工厂模式 抽象工厂 工厂方法模式

    在Java编程中,工厂模式是一种非常重要的设计模式,它属于创建型模式,主要用于对象的创建。本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心...

    设计模式-工厂模式

    在软件工程中,设计模式是一种被广泛接受的解决特定问题的方案,它们是经验的总结,旨在提高代码的可读性、可维护性和可复用性。今天我们要深入探讨的是“工厂模式”,一个非常基础且实用的创建型设计模式。 工厂...

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

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

    设计模式-华工课件 设计模式

    下面将详细阐述设计模式的基本概念及其重要性,并对常见的设计模式进行解析。 设计模式的起源可以追溯到20世纪90年代,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师共同编著的《设计模式:...

Global site tag (gtag.js) - Google Analytics