zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

    简单工厂模式是最简单的工厂模式,又叫静态工厂方法模式。它实现了同一接口的一些类进行实例的创建,一个工厂通过条件语句创建多个产品,产品的创建逻辑集中在一个工厂类中,客户听过传递不同的参数给工厂,实现创建不同产品的目的。如下:

                                                        

    Phone是一个接口,其有一个行为是ring, NokiaPhone和EricssonPhone分别实现了这个接口,在客户端使用时通过传入的是什么手机类型,而得到不同的手机。实现如下:

    Phone.java:

     package org.designpattern.creational.simplefactory;

         public interface Phone {
         public void ring();
         }

    NokaiPhone.java

        package org.designpattern.creational.simplefactory;
        public class NokiaPhone implements Phone {
            @Override
            public void ring() {
                // TODO Auto-generated method stub
                System.out.println("nokia phone ring!");
            }
        } 

      EricssonPhone.java

        package org.designpattern.creational.simplefactory;
        public class EricssonPhone implements Phone {
            @Override
            public void ring() {
                // TODO Auto-generated method stub
                System.out.println("ericsson phone ring!");
            }
        } 

      PhoneFactory.java

        package org.designpattern.creational.simplefactory;
        public class PhoneFactory {
            public Phone producePhone(String phoneType){
                if("nokia".equals(phoneType))
                    return new NokiaPhone();
                else if("ericsson".equals(phoneType))
                    return new EricssonPhone();
                else return null;
            }

        } 

    如果将PhoneFactory的写成两个静态的方法public static Phone produceNokiaPhone(),public static Phone produceEricssionPhone(),这种创建方法我们称之为静态工厂模式,其实我们使用较多的还是静态工厂模式。 

      使用时的客户端类:

        package org.designpattern.creational.simplefactory;
        public class Main {
            public static void main(String[] args){
                NokiaPhone nokia = (NokiaPhone) new PhoneFactory().producePhone("nokia");
                nokia.ring();
            }

        } 

      可见这个工厂类集中了所有的产品的创建逻辑,形成了一个无所不知的全能类,显然如果这个类不能工作了,则整个程序就会受到影响。更主要是这样不利于扩展,如果应用中需要的工厂类型较多,势必造成工厂类型的职责雷同,因此我们需要更进一步的抽象了,于是就出现了工厂方法和抽象工厂模式。

  • 相关阅读:
    【python27】猜随机数的小游戏
    【Python】【unittest】unittest测试框架中setup,teardown与setupclass,teardownclass的区别
    【Android自动化】unittest测试框架关于用例执行的几种方法
    【Android自动化】在使用uiautomator框架自动化时,往往有时再运行脚本时发现xxx实例属性不被允许
    史前第一篇,关于 类 的初次学习
    Emboss滤波器实现及应用
    Laplacian滤波器实现并用于图像锐化
    Prewitt 滤波器对图像进行边缘检测
    使用Sobel算子检测图像的水平特征和垂直特征
    差分滤波器的介绍及用于图像特征检测
  • 原文地址:https://www.cnblogs.com/kingcucumber/p/3191883.html
Copyright © 2011-2022 走看看