|--需求说明
|--解体思路
使用简单工厂模式
设计四个角色: 工厂类、抽象产品类、具体产品类
工厂类------具体产品角色的调用者/生产者
抽象产品类------申明成抽象类或一个接口,是具体产品角色的一个定义,是客户看到的东西
具体产品类------就是具体的产品
客户类-------客户角色,调用工厂产生具体实例的, 其实就是测试类
由一个工厂类,根据客户传入的参数来决定创建/生产哪一种具体产品。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public class Factory { 2 public Goods printGoods(String type) { 3 //根据用户传入的参数决定具体产品 4 if (type.equals("TV")) { 5 return new TVs(); 6 } else if (type.equals("food")) { 7 return new Foods(); 8 }else { 9 return new Beer(); 10 } 11 } 12 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public abstract class Goods { 2 //定义一个抽象类,里面写一个抽象的方法 3 public abstract void print(); 4 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public class Foods extends Goods { 2 //重写父类方法print 3 @Override 4 public void print(){ 5 System.out.println("打印食品价格:-------"); 6 } 7 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public class Beer extends Goods { 2 //重写父类方法print---父类的抽象方法必须在子类被实现 3 @Override 4 public void print() { 5 System.out.println("打印啤酒价格-----"); 6 } 7 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public class Client { 2 public static void main(String[] args) { 3 //实例化工厂类 4 Factory factory = new Factory(); 5 //使用工厂类的printGoods方法接收一个参数,传递给抽象产品类 6 Goods goods = factory.printGoods("TV"); 7 //调用抽象产品类的print方法 8 goods.print(); 9 } 10 }
|--运行结果