工厂模式(二)

一.工厂方法模式:允许在子类中实现本类的实例化

     

       1.作用:实例化对象的方法,即创建对象(生产产品);提供代替方法代替了调用构造函数创建新对象的通用方法;

       2.实例:日记记录功能(文件存取日志 数据库记录日志 控制图记录日志)需要一个统一的接口和一个具体实现类完成。

       3.各个角色类:

                 产品类(Product):定义了工厂方法创建的对象接口;

                具体产品类(ConcreteProduct):实现产品类接口;

                工厂类(Create-创建产品类 所以叫工厂类)声明工厂方法 返回一个产品类对象。可用于调用产品类对象的生成方法;

                具体工厂类:(ConcreteCreate)重写用于创建具体产品类的对象的方法;

//工厂方法模式实现 对象创建逻辑
public class PetFactory{
	
	public Pet getPet(String petType)
	{
		Pet prt=null;
		if("Bow".equals(petType))
		{
			prt=new Dog();
		}
		else if("Meav".equals(petType))
		{
			prt=new Cat();
		}
	}	
}
//使用工厂方法模式
public class FactoryMethod{
	public static void main(String[] args) {
		//创建工厂
		PetFactory petFactory=new PetFactory();
		//工厂实例化一个对象
		Pet pet=petFactory.getPet("Bow");
		
		//不知道创建哪种对象工厂??
		System.out.println(pet.petSound());
		
	}
}

     4.工厂方法模式应用场景:

             <1>.需要创建一个类,而编程时不确定该类的类型时(运行时确定);

              <2>当一个类希望由其子类来指定多创建对象的具体类型时;

扫描二维码关注公众号,回复: 3086964 查看本文章

              <3>想要定位被创建类,并获取其信息时;

二.抽象工厂模式:

     提供一个用于创建相关对象或相互依赖对象的接口,无需指定对象的具体类

      1.抽象工厂模式相比工厂方法模式的抽象层次更高(扩展--可以创建更多类型的对象),返回的是一组类的工厂;

      2.各个角色类:

            抽象工厂:声明一个用于完成抽象产品对象创建操作的接口;

            具体工厂:实现创建具体产品对象的操作;

            抽象产品:声明一个用于一类产品对象的接口;

            具体产品:定义由相应的具体工厂来创建的产品对象;

            客户端:使用抽象工厂和抽象产品类声明的唯一接口(客户端与其都是和关联关系,并不知道具体类实现细节);

     3.抽象工厂的实际实现都是在客户端运行时决定的,客户端与具体产品类完全解耦(方便添加产品类家族);

     4.屏蔽了具体产品类的创建方法---可在不同工厂(实现方法)之间进行转换;

     5.抽象工厂就像工厂,而工厂方法就像工厂里的一种产品生产线:

                用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到微软。但是用了抽象工厂模式,你只要换家工厂,就可以同时替换鼠标和键盘一套。如果你要的产品有几十个,当然用抽象工厂模式一次替换全部最方便(这个工厂会替你用相应的工厂方法)

      6.工厂方法模式与抽象工厂模式区别??

               

   

猜你喜欢

转载自blog.csdn.net/weixin_42249629/article/details/82391045