zoukankan      html  css  js  c++  java
  • 设计模式——抽象工厂模式

    作者: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工厂实现类。

     

  • 相关阅读:
    java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
    java基本类型(数值范围):浮点的底层表示定义,float计算快一些
    Dynamics CRM 开启EmailRouter日志记录
    shell的date日期循环方法:日期格式转时间戳计算,再将时间戳转回日期格式
    shell的数值计算,小数计算
    QT 入门教程经典
    QTSingleApplication使用笔记
    APP 上架苹果应用商城
    C、VDD、VSS、 VEE 和VPP的区别
    PIC12F629帮我用C语言写个程序,控制三个LED亮灭
  • 原文地址:https://www.cnblogs.com/haibiscuit/p/10526865.html
Copyright © 2011-2022 走看看