您当前的位置: 首页 > 

命运之手

暂无认证

  • 4浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【设计模式】【04】工厂模式

命运之手 发布时间:2022-04-11 10:30:27 ,浏览量:4

应用场景

工厂模式,英文名Factory Pattern

该模式通过专门的接口或类来创建对象,而不是直接new出对象

使用这种模式的原因一般主要有以下几种

  • 想要屏蔽产品的构建细节,不想让用户考虑太多
  • 通过一个工厂类,对多种产品进行集中构建,这样代码更统一,修改起来也方便

工厂模式根据具体应用场景和业务复杂度,也有多种形式的实现方式

实现一

最简单的情况,直接通过工厂类生产商品


	public class Product {
	
	    //构造方法使用protected权限,这样只有同包名的类可以调用该构造方法
	    //由于工厂类和产品类同包,所以工厂类可以创建产品,用户则无法手动创建
	    protected Product() {
	
	    }
	}
	
	public class Factory {
	
	    public static Product createProduct() {
	        return new Product();
	    }
	}

实现二

工厂类和产品类都有多个子类,每个工厂子类负责生产一种产品


	//产品类
	abstract public class Product {
	
	}


	//工厂类
	abstract public class Factory {
	
	    abstract public Product createProduct();
	}


	public class ProductA extends Product {
	
	}
	
	public class ProductB extends Product {
	
	}


	//用于创建产品A的工厂类
	public class FactoryA extends Factory {
	
	    @Override
	    public ProductA createProduct() {
	        return new ProductA();
	    }
	}
	
	//用于创建产品B的工厂类
	public class FactoryB extends Factory {
	
	    @Override
	    public ProductB createProduct() {
	        return new ProductB();
	    }
	}

实现三

产品类本身又充当工厂类的角色


	public class Product {
	  
	    private Product() {
	    }
	
	    public static Product create() {
	        return new Product();
	    }
	}

实现四

工厂可以生成多种类型的产品,并且每种类型的产品都是单例的


	public class Product {
	  
	    private static Map products = new HashMap();
	
	    private Product() {
	    }
	
	    synchronized public static Product get(String type) {
	        if (!products.containsKey(type))
	            products.put(type, new Product());
	        return products.get(type);
	    }
	}

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0382s