• DesignPattern_Java:Abstract Factory Pattern


    抽象工厂模式 Abstract Factory Pattern

    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

    为创建一组相关或相互依赖的对象提供一个接口,并且无须指定他们的详细类。

    抽象工厂角色(Abstract Factory):该角色是抽象工厂模式的核心,与应用系统无关。不论什么创建对象的工厂类必须实现这个接口。

    package com.DesignPattern.Creational.AbstractFactory;
    
    public interface AbstractFactory {
    
    	//创建产品A
    	public ProductA factoryA();
    	//创建产品B
    	public ProductB factoryB();
    }
    

    详细工厂角色(Concrete Factory):该角色实现了抽象工厂接口,含有选择合适的产品的逻辑,而且受到应用程序的调用以创建产品对象。

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ConcreteFactory1 implements AbstractFactory{
    
    	//创建等级为1的产品A
    	@Override
    	public ProductA factoryA() {
    		return new ProductA1();
    	}
    
    	//创建等级为1的产品B
    	@Override
    	public ProductB factoryB() {
    		return new ProductB1();
    	}
    
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ConcreteFactory2 implements AbstractFactory {
    
    	////创建等级为2的产品A
    	@Override
    	public ProductA factoryA() {
    		return new ProductA2();
    	}
    
    	////创建等级为2的产品B
    	@Override
    	public ProductB factoryB() {
    		return new ProductB2();
    	}
    
    }
    

    抽象产品角色(Abstract Product):该角色负责定义产品的共性,实现对产品最抽象的定义。

    package com.DesignPattern.Creational.AbstractFactory;
    
    public interface ProductA {
    
    	//产品A的公共方法
    	public void method1();
    	public void method2();
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public interface ProductB {
    
    	//产品B的公共方法
    	public void method1();
    	public void method2();
    }
    


    详细产品角色(Concrete Product):该角色是实现抽象产品角色所声明的接口,抽象工厂模式所创建的不论什么产品对象都是某个详细产品角色的实例。

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ProductA1 implements ProductA {
    
    	@Override
    	public void method1() {
    		System.out.println("等级为1的产品A的实现方法");
    	}
    
    	@Override
    	public void method2() {
    		System.out.println("等级为1的产品A的业务逻辑处理代码");
    	}
    
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ProductA2 implements ProductA {
    
    	@Override
    	public void method1() {
    		System.out.println("等级为2的产品A的实现方法");
    	}
    
    	@Override
    	public void method2() {
    		System.out.println("等级为2的产品A的业务逻辑处理代码");
    	}
    
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ProductB1 implements ProductB {
    
    	@Override
    	public void method1() {
    		System.out.println("等级为1的产品B的实现方法");
    	}
    
    	@Override
    	public void method2() {
    		System.out.println("等级为1的产品B的业务逻辑处理代码");
    	}
    
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ProductB2 implements ProductB {
    
    	@Override
    	public void method1() {
    		System.out.println("等级为2的产品B的实现方法");
    	}
    
    	@Override
    	public void method2() {
    		System.out.println("等级为2的产品B的业务逻辑处理代码");
    	}
    
    }
    

    package com.DesignPattern.Creational.AbstractFactory;
    
    public class ClientDemo {
    
    	public static void main(String[] args) {
    		// 定义两个工厂
    		AbstractFactory factory1 = new ConcreteFactory1();
    		AbstractFactory factory2 = new ConcreteFactory2();
    		// 生产等级为1的产品A
    		ProductA a1 = factory1.factoryA();
    		// 生产等级为1的产品B
    		ProductB b1 = factory1.factoryB();
    		// 生产等级为2的产品A
    		ProductA a2 = factory2.factoryA();
    		// 生产等级为2的产品B
    		ProductB b2 = factory2.factoryB();
    		// 业务处理
    		a1.method1();
    		a1.method2();
    		b1.method1();
    		a2.method1();
    		b2.method1();
    	}
    }
    


  • 相关阅读:
    sqlldr、sqluldr2_w64案例
    查看oracle的sid和sevice_name
    杂记
    GAN学习
    Leetcode 第 217 场周赛
    牛客编程巅峰赛S2第4场
    SAR图像变化检测的一点想法
    Fire! UVA
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7373451.html
Copyright © 2020-2023  润新知