zoukankan      html  css  js  c++  java
  • 设计模式(8)-----工厂方法模式

    工厂方法模式(Factory Method)

    定义

      定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类延迟到其子类。

    UML类图

    组成       

       1)抽象工厂角色(Creator): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

           2)具体工厂角色(ConcreteCreator):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

           3)抽象产品角色(Product):它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

           4)具体产品角色(ConcreteProduct):具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

    例子

      一个BMW制造工厂,可以制造各种型号的BMW。

    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  BMW.java   
     * @Description: Creator 所有BMW都继承自该类
     * @author: Han   
     * @date:   2016年6月20日 下午5:46:56   
     */  
    abstract public class BMW {
        
        public BMW() {}
    }
    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  BMW320.java   
     * @Description: 320型号BMW
     * @author: Han   
     * @date:   2016年6月20日 下午5:48:05   
     */  
    public class BMW320 extends BMW {
        public BMW320() {
            System.out.println("制造--》BMW320");
        }
    }
    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  BMW523.java   
     * @Description: 523型号BMW
     * @author: Han   
     * @date:   2016年6月20日 下午5:48:35   
     */  
    public class BMW523 extends BMW {
        
        public BMW523() {
            System.out.println("制造--》BMW523");
        }
    }

      抽象Product

    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  FactoryBMW.java   
     * @Description: Factory制造工厂(Product)
     * @author: Han   
     * @date:   2016年6月20日 下午5:49:24   
     */  
    public interface FactoryBMW {
        BMW createBMW();
    }

      ConcreteProduct

    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  FactoryBMW320.java   
     * @Description:  Factory of BMW320
     * @author: Han   
     * @date:   2016年6月20日 下午5:50:29   
     */  
    public class FactoryBMW320 implements FactoryBMW {
    
        @Override
        public BMW createBMW() {
            return new BMW320();
        }
    }
    package com.csdhsm.designpattem.factory;
    
    /**  
     * @Title:  FactoryBMW523.java   
     * @Description: Factory of BMW523
     * @author: Han   
     * @date:   2016年6月20日 下午5:50:12   
     */  
    public class FactoryBMW523 implements FactoryBMW {
    
        @Override
        public BMW createBMW() {
            return new BMW523();
        }
    }

      客户端

    package com.csdhsm.designpattem.factory;
    
    public class Solution {
        public static void main(String[] args) {
            FactoryBMW facBmw = new FactoryBMW320();
            facBmw.createBMW();
            facBmw = new FactoryBMW523();
            facBmw.createBMW();
        }
    }

      结果

    缺点

      工厂方法的加入,使得对象的数量成倍增长。

  • 相关阅读:
    中文编码问题
    TCP网络参数优化
    I/O的整体介绍
    TCP/IP
    Java序列化技术
    WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)
    λ(lambda)表达式
    HeapByteBuffer和DirectByteBuffer以及回收DirectByteBuffer
    锁的优化和注意事项
    java的NIO和AIO
  • 原文地址:https://www.cnblogs.com/a294098789/p/5601329.html
Copyright © 2011-2022 走看看