zoukankan      html  css  js  c++  java
  • Factory Method模式

    第四章: 工厂模式

      工厂模式所包含的角色:

        1.Product(产品)

        2.Creator(创建者)

        3.ConcreateProduct(具体的产品)

        4.ConcreateCreator(具体的创建者)

      实现流程: 定义抽象产品(Product),在抽象产品(Product)中可以定义需要实现的抽象方法,工厂模式在使用中一般都是以多态形式使用,如:

    Factory f = new XXXFactory("XXX");
    f.xxx();

       其中f.xxx();就是你在产品(Product)类中定义的方法,可以理解为你的产品造出来后,怎么去使用,那么就在这里定义。

      接着还需要抽象工厂,这里用到了模板模式(Template),在抽象工厂类中都会有Create();这个方法,在这个方法中可以放入需要的参数,可以理解为在加工产品是需要用到的‘原料’!

     如果用到工厂模式,那么在一般情况下都是有较为复杂逻辑,在Create()这个方法中就可以去进行产品的创建以及'加工'。

     具体产品类是必须的,继承抽象产品(Product),其中关系就比如联想Thinkpad继承电脑这样,电脑有开机方法,那么Thinkpad去继承它。

     具体工厂,抽象工厂只定义抽象方法,是具体工厂的父类,在具体工厂中再去进行new对象,完成在抽象工厂中定义的一系列流程。

     Code: 

      抽象工厂:

    package example.factory.method;
    
    /**
     * 用于生成Product类,并对Product进行"加工"
     * @author Administrator
     *
     */
    public abstract class Factory {
    		
    		public final Product create(String owner) {
    			Product p = createProduct(owner);
    			registerProduct(p);
    			return p;
    		}
    
    		protected abstract void registerProduct(Product p);
    
    		protected abstract Product createProduct(String owner);
    }
    

       

      抽象产品:

    package example.factory.method;
    
    /***
     * 只定义抽闲方法的抽象类,use
     * @author Administrator
     *
     */
    public abstract class Product {
    		public abstract void use ();
    }
    

     

      具体产品:

    package example.factory.method;
    /**
     * 产品,继承Product类的use使用功能。
     * @author Administrator
     *
     */
    public class IDCard extends Product{
    
    	private String owner;
    	
    	@Override
    	public void use() {
    		System.out.println("使用了" + owner + "的ID卡");
    	}
    	
    	IDCard(String owner){
    		System.out.println("制作" + owner + "的ID卡");
    		this.owner = owner;
    	}
    	
    	public String getOwner() {
    		return owner;
    	}
    		
    }
    

     
     具体工厂:

    package example.factory.method;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class IdCardFactory extends Factory{
    	
    	private List<String> owners = new ArrayList<>();
    	
    	@Override
    	protected void registerProduct(Product p) {
    		owners.add(((IDCard)p).getOwner());
    	}
    
    	@Override
    	protected Product createProduct(String owner) {
    		return new IDCard(owner);
    	}
    
    }
    

     

    package example.factory.method;
    
    public class Main {
    	
    	public static void main(String[] args) {
    		Factory factory = new IdCardFactory();
    		
    		Product card1 = factory.create("测试");
    		card1.use();
    	}
    
    }
    
  • 相关阅读:
    map迭代器
    线段树——校门外的树
    并查集——C
    并查集
    数论—— LCM
    【动态规划】合唱队形
    线段树——D
    线段树——E
    逆元,exgcd,欧拉定理,费马小定理
    待学知识点
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/9745994.html
Copyright © 2011-2022 走看看