zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

    理解了工厂方法模式后,再来看抽象工厂模式,就变得很容易了,这里是关于工厂方法的上篇随笔,请戳:简单工厂和工厂方法模式

    工厂方法模式中一个工厂只能生产一个产品,当要让一个工厂生产多个产品的时候,工厂方法模式就不怎么适用了,而抽象工厂是工厂方法的进一步抽象,抽象工厂就补足了工厂方法的短处,他们之间的角色是相同,只是抽象工厂在工厂方法基础上增加了为创建一组相关或相互依赖的产品对象的接口。

    抽象工厂的角色跟工厂方法的相同

    • 抽象工厂
    • 具体工厂
    • 抽象产品
    • 具体产品
    
    
    抽象工厂
    package com.songpu.dp.abstractfactory;
    public interface Factory {
    
    }
    
    
    具体工厂
    package com.songpu.dp.abstractfactory;
    public class FoodFactory implements Factory {
    	public Product createBread() {
    		return new Bread();
    	}
    
    package com.songpu.dp.abstractfactory;
    public class ToyFactory implements Factory {
    	public Product createMuppet() {
    		return new Muppet();
    	}	
    	public Product createBlock(){
    		return new Block();
    	} 
    }
    
    
    抽象产品
    package com.songpu.dp.abstractfactory;
    public interface Product {
    }
    
    package com.songpu.dp.abstractfactory;
    public interface Food extends Product {	
    }
    
    package com.songpu.dp.abstractfactory;
    public interface Toy extends Product {	
    }
    
    
    具体产品
    package com.songpu.dp.abstractfactory;
    public class Block implements Toy {
    	Block(){
    		System.out.println("Block被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Muppet implements Toy {
    	Muppet() {
    		System.out.println("Muppet被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Bread implements Food {
    	Bread(){
    		System.out.println("Bread被生产");
    	}
    }
    
    package com.songpu.dp.abstractfactory;
    public class Cake implements Food {
    	Cake() {
    		System.out.println("Cake被生产");
    	}
    }
    
    

    最后看一下执行结果

    Bread被生产
    Cake被生产
    Block被生产
    Muppet被生产
    
  • 相关阅读:
    2017寒假作业二 汇总随笔
    2017寒假作业一
    UVA 1601 POJ 3523 The Morning after Halloween 【双向BFS】【A*】 (好题)
    UVA 10570 Meeting with Aliens 【枚举+结论题】
    UVA 1614 Hell on the Markets 【贪心+结论题】
    UVA 10603 Fill【BFS】
    Codevs 1288 埃及分数 【IDA*】
    UVA 11212 Editing a Book 【IDA*】
    UVA 11624 Fire! 【特殊BFS】
    UVA 1599 Ideal Path 【两次BFS+贪心】 (好题)
  • 原文地址:https://www.cnblogs.com/sweiqi/p/5992560.html
Copyright © 2011-2022 走看看