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
    	}
    	
    }
    

      

  • 相关阅读:
    车牌号验证正则验证
    人民币转大写
    Base64 格式图片上传至服务器
    郭博分析modbus主机模式
    解决小BUG的罗列
    写flash时为什么需要先擦除?
    C语言的很吊的printf-----来自一个C语言竞赛题目
    ( # #@ ## 在define中的应用)或( 连接两个字符串或者两个数字、强制转化成单引号、强制转化成双引号 )附加字符串强制转化成数字
    IAR无法goto的解决办法
    link list
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/6226778.html
Copyright © 2011-2022 走看看