• 设计模式——抽象工厂模式


    作者:haibiscuit

    时间:2019:3:13

    您的star是我不断前行的动力

    https://github.com/haibiscuit

    转载请说明出处

    :抽象工厂模式

        定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。

        使用场景:1QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

          例如:

                创建Spring风格的浅绿色的按钮,

                               绿色边框的文本框,

                               绿色边框的组合框

                创建Summer风格的浅蓝色的按钮,

                               蓝色边框的文本框,

                               蓝色边框的组合框

        示例:

            //目标创建类

            interface  Button{

                void display();

            }

            class SpringButton implements Button{

                @Override

                public void display(){

                    System.out.println("Spring风格Button");

                }

            }

            class  SummerButton implements Button{

                @Overrider

                public void display(){

                    System.out.println("Spring风格Button");

                }

            }

            //文本框、组合框的实现和Button一样

            //以下是抽象工厂类的实现

            interface SkinFactory{

                Button createButton();

                TextField  createTextField();

                comboBox  createComboBox();

            }

            //Spring风格的工厂实现类

            class SpringSkinFactory implements SkinFactory{

                @Override

                public Button createButton(){

                   return new SpringButton();

                }

                @Override

                public TextField  createTextField(){

                   return new SpringTextField();

                }

                @Override

                public comboBox  createComboBox(){

                    return new SpringComboBox();

                }

            }

            //Summer风格的工厂实现类

            class SpringSkinFactory implements SkinFactory{

                @Override

                public Button createButton(){

                   return new SummerButton();

                }

                @Override

                public TextField  createTextField(){

                   return new SummerTextField();

                }

                @Override

                public comboBox  createComboBox(){

                    return new SummerComboBox();

                }

            }

            class Test{   //为了实现开闭原则,可以将工厂的具体实现类的路径写在xml中,利用反射来生成对象,这里只是简单的new一下,具体参考适配器中的示例

                public  static  void main(String []args){

                    SkinFactory factory;

                    Button button;

                    factory = new SpringSkinFactory();

                    button = factory.createButton();

                    button.display();

                }

            }

        总结:

        1.产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

        2.但是这里的可扩展性就有点烦,比如以上实现了SummerSpring风格的ButtonTextFieldComboBox

        如果我想实现Winter风格的,需要分别继承ButtonTextFieldComboBox实现新的类,同样需要继承SkinFactory工厂类,实现WinterSkinFactory工厂实现类。

     

  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/haibiscuit/p/10526865.html
Copyright © 2020-2023  润新知