zoukankan      html  css  js  c++  java
  • AbstractFactoryPattern(抽象工厂)

    /**
     * 抽象工厂模式
     * 分为四部分
     * 1.产品接口
     * 2.产品实例
     * 3.工厂接口(生产同一个产品的不同等级,这里是主要区别)
     * 4.工厂实例
     * 工厂类最好用单例模式,但在这里主要是说明工厂方法,就不用单例了
     * 与工厂方法不同的地方是,可以生产不同等级的产品
     * @author TMAC-J
     *
     */
    public class FactoryMethodPattern {
    	/**
    	 * 产品
    	 *
    	 */
    	interface IProduct{
    		void doSomething();
    	}
    	
    	public class ConcreteProduct1 implements IProduct{
    		
    		public ConcreteProduct1() {}//等级为1
    		
    		public ConcreteProduct1(String a) {}//等级为2
    		
    		@Override
    		public void doSomething() {
    			System.out.println("concreteProduct do something!");
    		}
    	}
    	
    	public class ConcreteProduct2 implements IProduct{
    		
    		public ConcreteProduct2() {}//等级为1
    		
    		public ConcreteProduct2(String a) {}//等级为2
    		
    		@Override
    		public void doSomething() {
    			System.out.println("concreteProduct2 do something!");
    		}
    	}
    	
    	interface IFactory{
    		IProduct createGrade1();//创建等级为1的产品
    		IProduct createGrade2(String a);//创建等级为2的产品
    	}
    	
    	public class ConcreteFactory1 implements IFactory{
    		@Override
    		public IProduct createGrade1() {
    			IProduct product = new ConcreteProduct1();
    			return product;
    		}
    
    		@Override
    		public IProduct createGrade2(String a) {
    			IProduct product = new ConcreteProduct1(a);
    			return product;
    		}
    	}
    	
    	public class ConcreteFactory2 implements IFactory{
    		@Override
    		public IProduct createGrade1() {
    			IProduct product = new ConcreteProduct2();
    			return product;
    		}
    
    		@Override
    		public IProduct createGrade2(String a) {
    			IProduct product = new ConcreteProduct2(a);
    			return product;
    		}
    	}
    	
    	public void test(){
    		IFactory concreteFactory1 = new ConcreteFactory1();
    		concreteFactory1.createGrade1();//生产等级1产品1
    		concreteFactory1.createGrade2("a");//生产等级1产品1
    		IFactory concreteFactory2 = new ConcreteFactory2();
    		concreteFactory2.createGrade1();//生产等级1产品1
    		concreteFactory2.createGrade2("a");//生产等级2产品1
    	}
    	
    }
    

      

  • 相关阅读:
    arcgis for flex 学习笔记(一)
    也说JS脚本加载控制
    数据验证随想(续)
    Oracle 脚本记录
    探讨:如何更快的赋值取值
    正则表达式技巧
    类似web风格的 Winform 分页控件
    数据验证随想
    [leetcode]Excel Sheet Column Title
    [leetcode]Merge k Sorted Lists
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/6226778.html
Copyright © 2011-2022 走看看