zoukankan      html  css  js  c++  java
  • 工厂方法模式

    简单工厂模式

    简单工厂模式是类的创建模式,又叫做静态工厂方法模式。简单工厂模式由一个工厂对象决定产出哪种产品的实例。

    为什么使用简单工厂模式

    原因:解耦。

    A对象如果调用B对象,最简单的方法是new一个B出来,不过如果C和B类都实现一个接口/继承一个类,那么系统需要把B类改成C类,程序不得不重写A类代码。如果程序中有100个地方new了B对象,那么要修改100处,耦合度太高。

    简单工厂的实例

    水果

    public interface Fruit {	
    	public void grow();
    }
    

    苹果

    public class Apple implements Fruit{
    	public void grow() {
    		System.out.println("Apple grow");
    	}
    }
    

    葡萄

    public class Grape implements Fruit{
    	public void grow() {
    		System.out.println("Grape grow");
    	}
    }
    

     园丁,工厂类

    public class Gardener {
    	public static Fruit getFruit(String fruitName){
    		if("apple".equals(fruitName)){
    			return new Apple();
    		}else if("grape".equals(fruitName)){
    			return new Grape();
    		}
    		return null;
    	}
    }
    

    main方法

    public static void main(String[] args) {
    		Fruit apple = Gardener.getFruit("apple");
    		apple.grow();
    		Fruit grape = Gardener.getFruit("grape");
    		grape.grow();
    }
    

     这样写,用户不需要自己去生产产品,只需要拿到自己的东西就好,这样代码的职责更加明确,耦合度降低了。

    方法改进

    上面的代码虽然进行一定的分离,但是产品数量如果不断增加那么工厂类每次都需要家if else,这样也不好。

    public class Gardener {
    	public static Fruit getFruit(String fruitPath) throws Exception{
    		Class<?> c = Class.forName(fruitPath);
    		return (Fruit) c.newInstance();
    	}
    }
    

    这个地方使用了反射

    main

    public static void main(String[] args) throws Exception {
    	Fruit apple = Gardener.getFruit("algorithm.Apple");
    	apple.grow();
    	Fruit grape = Gardener.getFruit("algorithm.Grape");
    	grape.grow();
    }
    

    这里也有一点问题,比如要重构包的路径,那么就需要修改代码。有三种方法推荐:

    1.

    public interface FruitPath
    {
        public final static String apple = "com.xrq.simplefactory.Apple";
        public final static String grape = "com.xrq.simplefactory.Grape";
    }
    

    2.

    Apple=com.xrq.simplefactory.Apple
    Grape=com.xrq.simplefactory.Grape
    

    3.

    <apple>com.xrq.simplefactory.Apple</apple>
    <grape>com.xrq.simplefactory.Grape</grape>
    

    简单工厂模式或者工厂模式关注点在于创建产品和消费产品分离。

    简单工厂模式的应用

    jdk中简单工厂模式有很多应用,比较典型的是线程池。我们使用线程池,可以使用ThreadPoolExecutor,根据喜好传入corePoolSize、maximumPoolSize、keepAliveTimem、unit、workQueue、threadFactory、handler这几个参数,new出一个指定的ThreadPoolExecutor出来。

    工厂模式的优缺点

    优点

    1.简单优化了软件体系结构,明确各个模块的职责。

    2.实现生产对象和使用对象的分离,解耦。

    缺点

    1.使用反射效率会低一些。

  • 相关阅读:
    iOS 列表三级展开
    iOS 聊天界面
    iOS 地图(添加大头针)
    iOS 地图
    swift 快速创建一些基本控件
    swift
    swift
    swift4.2 打印所有系统字体
    Xcode 去掉控制台无用打印信息
    swift
  • 原文地址:https://www.cnblogs.com/tp123/p/6474542.html
Copyright © 2011-2022 走看看