工厂模式之java实现

儿子1岁11个月,逐渐有自己的小思维,会表达自己的想法,话比之前也多了很多。奶奶教了他很多动物叫声,如小鸟”叽叽喳“,小羊”咩咩咩“,小狗”汪汪汪“。他自己也常说给我听,他的一点一滴的成长都让麻麻很欣喜。那么第二篇,麻麻就从制造你最喜爱的这些小动物,开始工厂模式的java实现吧。

实现

  • 接口类:
// 接口类,抽象方法的集合
public interface Toy 
{    
    void makeSound();
}
  • 实体类,小鸟:
// 继承接口,实现接口的抽象方法
public class Bird implements Toy 
{    
    @Override    
    public void makeSound() 
    {        
        System.out.println("叽叽喳");    
    }
}
  • 实体类:小羊
// 继承接口,实现接口的抽象方法
public class Sheep implements Toy
{    
    @Override    
    public void makeSound() 
    {        
        System.out.println("咩咩咩");
    }
}
  • 实体类:小狗
// 继承接口,实现接口的抽象方法
public class Dog implements Toy 
{    
    @Override   
    public void makeSound() 
    {        
        System.out.println("汪汪汪");    
    }
}
  • 工厂类:根据传入的参数,动态决定应该创建哪一个产品类
public class ToyFactory 
{    
    public  Toy GetToy(String name)    
    {        
        switch (name)
        {            
            case "bird":                return new Bird();            
            case "dog":                 return new Dog();            
            case "sheep":               return new Sheep();            
            default:                return null;        
        }    
     }
 }
  • 测试Demo
import java.util.Scanner;
public class FactoryPatternDemo 
{    
    public static void main(String[] args) 
    {        
        ToyFactory toyFactory = new ToyFactory();        
        Scanner input = new Scanner(System.in);        
        //noinspection InfiniteLoopStatement        
        while (true) 
        {            
            String str = input.next();            
            Toy toy = toyFactory.GetToy(str);            
            if(toy != null) 
            {                
                toy.makeSound();            
            }            
            else            
            {                
                System.out.println("input  " + str + "is invalid");            
            }        
        }    
    }
}

回顾

java的接口类比较像C++的纯需函数,都是不能实例化对象的。不同的是java的接口类更严格,比如:

  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容