• 简单工厂模式


    http://fangguanhong.iteye.com/blog/1985694

    下面讲解简单工厂模式:
    意图:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。通常它根据比变量的不同返回不同的类的实例。
    简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。
    简单工厂模式(Simple Factory)模式的构成:
    1、工厂类(Creator)角色:担任这个角色的是简单工厂模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对戏那个,它往往由一个具体类实现。 2、抽象产品(Product)角色:担任这个角色的类是简单工厂模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个接口或抽象类实现。
    3、具体产品(Concretr Product)角色:简单工厂模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体类实现。

    下面自已实现一个具体产品的角色

    package com.shengshiyuan.simplefactory;

    /**
    * 抽象产品角色(抽象类或接口)
    * 类: Product <br>
    * 描述: TODO <br>
    * 作者:
    * 时间: Dec 5, 2013 2:42:11 PM
    */
    public abstract class Product {

    }

    package com.shengshiyuan.simplefactory;

    /**
    * 具体产品角色
    * 类: ConcreteProductA <br>
    * 描述: TODO <br>
    * 作者:
    * 时间: Dec 5, 2013 2:44:18 PM
    */
    public class ConcreteProductA extends Product {

    }

    package com.shengshiyuan.simplefactory;

    /**
    * 具体产品角色
    * 类: ConcreteProductB <br>
    * 描述: TODO <br>
    * 作者:
    * 时间: Dec 5, 2013 2:44:36 PM
    */
    public class ConcreteProductB extends Product {

    }

    package com.shengshiyuan.simplefactory;

    /**
    * 工厂类角色
    * 类: Creater <br>
    * 描述: TODO <br>
    * 作者:
    * 时间: Dec 5, 2013 2:45:22 PM
    */
    public class Creator {
        public static Product createPruduct(String str) {
            if ("A".equals(str)) {
                return new ConcreteProductA();
            } else if ("B".equals(str)) {
                return new ConcreteProductB();
            }
            return null;
        }
    }

    package com.shengshiyuan.simplefactory;

    /**
    * 客户端测试类
    * 类: Client <br>
    * 描述: TODO <br>
    * 作者:
    * 时间: Dec 5, 2013 2:47:16 PM
    */
    public class Client {
        public static void main(String[] args) {
            Product productA = Creator.createPruduct("A");
            System.out.println(productA.getClass().getName());

            Product productB = Creator.createPruduct("B");
            System.out.println(productB.getClass().getName());
        }
    }

     
    缺点:由于简单工厂模式使用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法实现基于继承 等级结构
    简单工厂模式在JAVA中的应用
         DateFormat与简单工厂模式
    public abstract class DateFormat
    extends Format
    
    

    DateFormat 是日期/时间格式化子类的抽象类

    SAX2库中的XMLReaderFactory与简单工厂模式

    《javaee实用教程》-factory模式讲解

    image

     

    package face;
    public interface Human {
        void eat();
         void walk();
    }

    package iface;
    import face.Human;
    public class American implements Human{
        public void eat() {
            System.out.println("美国人吃西餐!");
           }
          public void walk() {
             System.out.println("美国人经常坐车!");
           }
    }

    package iface;
    import face.Human;
    public class Chinese implements Human{
        public void eat() {
            System.out.println("中国人很会吃!");
           }
           public void walk() {
            System.out.println("中国人健步如飞!");
           }
    }

    package factory;
    import iface.American;
    import iface.Chinese;
    import face.Human;
    public class Factory {
        public Human getHuman(String name){
            if(name.equals("Chinese")){
                return new Chinese();
            }else if(name.equals("American")){
                return new American();
            }else{
                throw new IllegalArgumentException("参数不正确");
            }
           }
    }

     

    package test;
    import face.Human;
    import factory.Factory;
    public class Test {
        public static void main(String[] args) {
              Human human=null;
              human=new Factory().getHuman("Chinese");
              human.eat();
              human.walk();
            human=new Factory().getHuman("American");
              human.eat();
              human.walk();
           }
    }

     
    image
     
     
     
     
     
     
  • 相关阅读:
    拦截器
    git和bootstrap
    java面试题目
    Struts2笔记
    sql语句的面试题
    公司面试总结
    面试题12 包含 min 函数的栈 【栈】
    面试题11 字符串的排列[算法]
    [面试] 进程和线程的区别(面试题)
    [baidu] 面向对象的三个基本要素和五项基本设计原则
  • 原文地址:https://www.cnblogs.com/elite-2012/p/3462871.html
Copyright © 2020-2023  润新知