`
dengzhangtao
  • 浏览: 667958 次
  • 性别: 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)...这就是我们要说的抽象工厂模式。  

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

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

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

    C#简单登录演示抽象工厂设计模式,他具体而简单的把抽象工厂设计模式描绘出来了!

    解析iOS应用开发中对设计模式中的抽象工厂模式的实现

    主要介绍了解析iOS应用开发中对设计模式中的抽象工厂模式的实现,示例代码为传统的Objective-C,需要的朋友可以参考下

    java中的设计模式,主要的设计模式

    单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式 适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式观察者模式、策略模式、模板模式、责任链模式、解析器模式、迭代子模式 ...

    Android 源码设计模式解析与实战

    本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    Android源码设计模式解析与实战

    本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    Android源码设计模式解析与实战PDF

    本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    《Android 源码设计模式解析与实战》

    本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    Java 之23种设计模式解析

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    各种设计模式及解析

    4、抽象工厂 Abstract Factory (很多的产品,分别由不同的工厂出产) 5、模板方法 Template Method (定义一个操作中的算法骨架,将其具体算法延迟到子类中) 6、单例 Singleton (保证应用程序中,某个类只有一个实例...

    design-pattern-java.pdf

    设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人联机射击游戏中的设计模式应用(一) 多人联机射击游戏中的设计模式应用(二) 数据库同步系统 设计模式综合实例分析之数据库同步系统(一) 设计...

    何红辉关爱民-Android源码设计模式解析与实战(带书签第2版).pdf

    本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第 一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    何红辉关爱民-Android源码设计模式解析与实战(带书签高清第2版).pdf

    本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码《Objective-C编程之道:iOS设计模式解析》是基于iOS的软件开发指南。书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

Global site tag (gtag.js) - Google Analytics