zoukankan      html  css  js  c++  java
  • Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

    一、概述

    1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品

    PS:抽象工厂与普通工厂各自的优缺点:

    (1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥

    (2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方

    二、类结构

    1.Televison.java

    2.Fridge.java

    3.SamsumgTelevison.java

    4.SamsungFridge.java

    5.HaierTevevison.java

    6.HaierFridge.java

    7.AbstractFactory.java

    8.SamsungFactory.java

    9.HaierFactory.java

    三、代码

    1.Televison.java

    public abstract class Televison {
    
    	abstract void show();
    }
    

      

    2.Fridge.java

    public abstract class Fridge {
    
    	abstract void cool();
    }
    

      

    3.SamsumgTelevison.java

    public class SamsungTelevison extends Televison {
    
    	@Override
    	public void show(){
    		System.out.println("SamsungTelevison showing...........");
    	}
    }
    

      

    4.SamsungFridge.java

    public class SamsungFridge extends Fridge {
    
    	@Override
    	void cool() {
    		System.out.println("SamsungFridge cooling");
    	}
    
    }
    

      

    5.HaierTevevison.java

    public class HaierTelevison extends Televison {
    
    	@Override
    	void show() {
    		System.out.println("海尔电视 showinng...........");
    	}
    
    }
    

      

    6.HaierFridge.java

    public class HaierFridge extends Fridge {
    
    	@Override
    	void cool() {
    		System.out.println("海尔冰箱冷却中............");
    	}
    
    }
    

      

    7.AbstractFactory.java

    public abstract class AbstractFactory {
    	abstract Televison createTelevison();
    	abstract Fridge createFridge();
    }
    

      

    8.SamsungFactory.java

    public class SamsungFactory extends AbstractFactory {
    
    	@Override
    	Televison createTelevison() {
    		return new SamsungTelevison();
    	}
    
    	@Override
    	Fridge createFridge() {
    			return new SamsungFridge();
    	}
    
    }
    

      

    9.HaierFactory.java

    public class HaierFactory extends AbstractFactory {
    
    	@Override
    	Televison createTelevison() {
    		return new HaierTelevison();
    	}
    
    	@Override
    	Fridge createFridge() {
    		return new HaierFridge();
    	}
    
    }
    

      

    10.Test.java

    public class Test {
    
    	@org.junit.Test
    	public void test(){
    		AbstractFactory factory = new SamsungFactory();
    		Televison tv = factory.createTelevison();
    		Fridge fridge = factory.createFridge();
    		tv.show();
    		fridge.cool();
    		
    		System.out.println("=======================================");
    		
    		factory = new HaierFactory();
    		tv = factory.createTelevison();
    		fridge = factory.createFridge();
    		tv.show();
    		fridge.cool();
    	}
    }
    

      

    运行结果:

  • 相关阅读:
    windows下端口映射(端口转发)
    SQLServer 2008 复制同步(发布、订阅)的几个问题
    SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理
    jQuery函数的等价原生函数【转载】
    JavaScript学习第三天
    持续集成工具hudson【转载】
    linux-unzip命令【转载】
    javascript学习第一天
    java.util.Properties
    Eclipse快捷键【转载】
  • 原文地址:https://www.cnblogs.com/shamgod/p/4586720.html
Copyright © 2011-2022 走看看