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

    github https://github.com/spring2go/core-spring-patterns.git

    问题域

    • 相关产品家族
      • 电器设备工厂
      • 电扇Fan
      • 日光灯TubeLight
      • 开关Switch
    • 不同风格产品家族
      • 中国电器设备厂(China)
      • 美国电器设备分厂(US)

    定义

    • 提供一个接口,用于制造一族相关或者相互依赖的产品,无需指定具体的实现类。
    • 创建工厂的工厂

    关系图

    产品 电扇接口

    public interface IFan {
    	
    	public void swithOn();
    	
    	public void switchOff();
    
    }
    

    电器 工厂接口

    1. 生产风扇
    2. 生产日光灯
    public interface IElectricalFactory {
    	
    	IFan createFan();
    	
    	ITubeLight createTubeLight();
    }
    

    中国工厂和产品实现

    // 中国制造的风扇
    public class ChineseFan implements IFan {
    
    	public void swithOn() {
    		System.out.println("The ChineseFan is swithed on ...");
    	}
    
    	public void switchOff() {
    		System.out.println("The ChineseFan is swithed off ...");
    	}
    
    }
    
    // 中国制造的台灯
    public class ChineseTubeLight implements ITubeLight {
    	public void swithOn() {
    		System.out.println("The ChineseTubeLight is swithed on ...");
    	}
    
    	public void switchOff() {
    		System.out.println("The ChineseTubeLight is swithed off ...");
    	}
    
    	public void tuneLight() {
    		System.out.println("The ChineseTubeLight is tuned ...");
    		
    	}
    }
    
    // 中国 电器工厂 实现
    public class ChineseElectricalFactory implements IElectricalFactory {
    
    	public IFan createFan() {
    		return new ChineseFan();
    	}
    
    	public ITubeLight createTubeLight() {
    		return new ChineseTubeLight();
    	}
    
    }
    

    美国工厂和产品 实现

    // 美国制造的风扇
    public class USFan implements IFan {
    
    	public void swithOn() {
    		System.out.println("The USFan is swithed on ...");
    	}
    
    	public void switchOff() {
    		System.out.println("The USFan is swithed off ...");
    	}
    
    }
    
    // 美国制造的 日光灯
    public class USTubeLight implements ITubeLight {
    	public void swithOn() {
    		System.out.println("The USTubeLight is swithed on ...");
    	}
    
    	public void switchOff() {
    		System.out.println("The USTubeLight is swithed off ...");
    	}
    
    	public void tuneLight() {
    		System.out.println("The USTubeLight is tuned ...");	
    	}
    }
    
    // 美国 电器工厂的 实现
    public class USElectricalFactory  implements IElectricalFactory {
    
    	public IFan createFan() {
    		return new USFan();
    	}
    
    	public ITubeLight createTubeLight() {
    		return new USTubeLight();
    	}
    
    }
    

    客户端调用

    public class AbstractFactoryMain {
    
    	public static void main(String[] args) {
    
    		// 中国 电器工厂 出来的产品都是中国风格的产品
    		IElectricalFactory electricalFactory = new ChineseElectricalFactory();
    		IFan fan = electricalFactory.createFan();
    		fan.swithOn();
    		
    		// 美国 电器工厂 出来的产品都是美国风格的产品
    		electricalFactory = new USElectricalFactory();
    		ITubeLight tubeLight = electricalFactory.createTubeLight();
    		tubeLight.swithOn();
    		tubeLight.tuneLight();
    	}
    }
    

    好处

    • 解耦
      • 客户代码和具体产品解耦
      • 产品家族之间解耦
    • 比工厂模式更高层的设计模式
    • 标准化产品构造流程
    • 易于替换产品家族

    Spring框架应用

    • FactoryBean 接口基于抽象工厂模式
      • ProxyFactoryBean
      • JndiFactoryBean
      • LocalSessionFactoryBean
      • LocalContainerEntityManagerFactoryBean
    • 构造具有很多依赖的复杂对象
    • 构造逻辑易变且依赖于配置
  • 相关阅读:
    大项目之网上书城(五)——主页(End)
    # 大项目之网上书城(四)——主页(下中)
    大项目之网上书城(三)——主页(中)
    大项目之网上书城(二)——主页(上)
    大项目之网上书城(一)——注册页面
    Mycat
    centos7 bash: netstat: 未找到命令
    docker 推送镜像到Harbor错误修改
    Jenkins插件下载镜像加速
    docker镜像加速器
  • 原文地址:https://www.cnblogs.com/zhangjianbin/p/9147832.html
Copyright © 2011-2022 走看看