zoukankan      html  css  js  c++  java
  • java 工厂的变形模拟的各种应用

     工厂模式是在项目开发中使用效率高,意一个接口,该定义用于创建对象。让子类来决定哪一个类实例。

    这就是一个工厂类的示意图

    接着来一个简单的样例:

    如上图所看到的,我们首先定义我们的产品抽象类接口,也能够是抽象类:

    package factory;
    
    public abstract class PlatForm {
    	public void search(){
    		System.out.println("你搜索的结果是。。。

    。。。

    "); } public abstract void music(); }


    以下是一些实现类

    package factory;
    
    public class BaiduProduct extends PlatForm{
    
    	@Override
    	public void music() {
    		System.out.println("baidu music");
    	}
    
    }
    

    package factory;
    
    public class Qihu360Product extends PlatForm{
    
    	@Override
    	public void music() {
    		System.out.println("360 music");
    	}
    
    }
    

    package factory;
    
    public class SogouProduct extends PlatForm{
    
    	@Override
    	public void music() {
    		System.out.println("sogou music");
    	}
    
    }
    

    三个实现类已经完毕,以下我们要来一个工厂的抽象类
    package factory;
    
    public abstract class Creator {
    	/**
    	 * 创建一个产品对象,当中T 能够为 String Enum Class等  參数能够自己设置
    	 * @param c
    	 * @return
    	 */
    	public abstract <T extends PlatForm> T createProduct(Class<T> c);
    }
    
    以下是实现类

    package factory;
    
    public class ConcrentCreator extends Creator{
    
    	@Override
    	public <T extends PlatForm> T createProduct(Class<T> c) {
    		PlatForm plat = null;
    		try {
    			/**
    			 * 创建一个用于创建对象的接口,让子类去确定实例化哪一个对象。工厂方法,让一个类的实例化延迟到子类
    			 */
    			plat = (PlatForm) Class.forName(c.getName()).newInstance();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		return (T) plat;
    	}
    
    }
    

    package factory;
    
    public class Client {
    	public static void main(String[] args) {
    		Creator creator = new ConcrentCreator();
    		//在这里能够把你要实例化的类给传进去。然后就可以调用你想要的方法。

    PlatForm plat = creator.createProduct(BaiduProduct.class); plat.search(); plat.music(); } }


    在这里面模仿了一个client,就能够输出你想要的结果。

    在工厂模式方法中抽象产品类负责定义产品的共性,实现实物最抽象的定义;creator为产品抽喜创建类,也就是抽象工厂详细怎样创建产品类有详细的实现creator的工厂类来完毕。工厂类的变种非常多,以下,我总结类一个比較通用的源代码。

    1:抽象产品类

    package factory.total;
    
    public abstract class Product {
    	public void method1(){
    		//全部产品的共性
    	}
    	//抽象方法   详细有继承它的类去实现
    	public abstract void method2();
    }
    
    2:产品实现类

    package factory.total;
    
    public class ConcretProduct1 extends Product{
    
    	@Override
    	public void method2() {
    		//TODO
    	}
    
    }
    
    package factory.total;
    
    public class ConcretProduct2 extends Product{
    
    	@Override
    	public void method2() {
    		//TODO
    	}
    
    }
    

    3:抽象工厂类

    package factory.total;
    
    public abstract class Creator {
    	public abstract <T extends Product> T createMethod(Class<T> c);
    		
    }
    

    4:详细工厂类:

    package factory.total;
    
    public class ConcreteCreator extends Creator{
    
    	@Override
    	public <T extends Product> T createMethod(Class<T> c) {
    		Product pro = null;
    		try {
    			pro = (Product) Class.forName(c.getName()).newInstance();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		return (T) pro;
    	}
    
    }
    

    场景模拟类

    package factory.total;
    
    public class Client {
    	public static void main(String[] args) {
    		Creator creator = new ConcreteCreator();
    		Product pro = creator.createMethod(ConcretProduct1.class);
    		pro.method1();
    		pro.method2();
    	}
    }
    

    当中工厂模式又分为简单工厂模式,和多级工厂模式,只是这两种情况。和上一种都比較类似了,当中简单工厂模式仅仅是简单的把抽象工厂类去掉,然后把工厂实现类的方法改成static方法。多级工厂模式是指:比如当我们见到一个比較复杂的项目时。全部的产品类都放到一个工厂类中去初始化会显得结构不清晰,那么我们如今就为每一种产品都有自己的一个工厂类;以下我会给出实例多级工厂类的应用。

    我是有些基础类还是使用曾经的。仅仅只是为每一个产品添加了一个工厂类

    1:抽象工厂类:

    package factory.more;
    
    public abstract class AbstractPlatFactory {
    	public abstract PlatForm createPlat();
    }
    

    2:详细工厂类:

    package factory.more;
    
    public class BaiduFactory extends AbstractPlatFactory{
    
    	@Override
    	public PlatForm createPlat() {
    		// TODO Auto-generated method stub
    		return new BaiduProduct();
    	}
    
    }
    

    package factory.more;
    
    public class Qihu360Factory extends AbstractPlatFactory{
    
    	@Override
    	public PlatForm createPlat() {
    		return new Qihu360Product();
    	}
    
    }
    

    package factory.more;
    
    public class SogouFactory extends AbstractPlatFactory{
    
    	@Override
    	public PlatForm createPlat() {
    		return new SogouProduct();
    	}
    
    }
    

    场景类:
    package factory.more;
    
    public class Client {
    	public static void main(String[] args) {
    		 PlatForm plat = new BaiduFactory().createPlat();
    		 plat.search();
    		 plat.music();
    	}
    }
    
    这是多级工厂类的使用,

    实际上还有抽象工厂类的应用,它是指为相关对象提供一组接口,如果没有指定具体的类。

    (今天太晚了,过了一段时间,然后会说)

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4793571.html
Copyright © 2011-2022 走看看